[PATCH] ARM: fix Thumb-2 bug in AES assembler code

Nicolas Pitre nicolas.pitre at linaro.org
Tue Sep 17 12:35:48 EDT 2013


On Tue, 17 Sep 2013, Ard Biesheuvel wrote:

> Patch 638591c enabled building the AES assembler code in Thumb2 mode.
> However, this code uses arithmetic involving PC rather than adr{l}
> instructions to generate PC-relative references to the lookup tables,
> and this needs to take into account the different PC offset when
> running in Thumb mode.

Wouldn't it be better to fix this using adr instead?


> 
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
> ---
> 
> This needs cc to stable for 3.10/3.11 as well.
> 
> 
>  arch/arm/crypto/aes-armv4.S | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/crypto/aes-armv4.S b/arch/arm/crypto/aes-armv4.S
> index 19d6cd6..33c30ab 100644
> --- a/arch/arm/crypto/aes-armv4.S
> +++ b/arch/arm/crypto/aes-armv4.S
> @@ -148,7 +148,8 @@ AES_Te:
>  @ 		 const AES_KEY *key) {
>  .align	5
>  ENTRY(AES_encrypt)
> -	sub	r3,pc,#8		@ AES_encrypt
> +ARM(	sub	r3,pc,#8	)	@ AES_encrypt
> +THUMB(	sub	r3,pc,#4	)
>  	stmdb   sp!,{r1,r4-r12,lr}
>  	mov	r12,r0		@ inp
>  	mov	r11,r2
> @@ -381,7 +382,8 @@ _armv4_AES_encrypt:
>  .align	5
>  ENTRY(private_AES_set_encrypt_key)
>  _armv4_AES_set_encrypt_key:
> -	sub	r3,pc,#8		@ AES_set_encrypt_key
> +ARM(	sub	r3,pc,#8	)	@ AES_set_encrypt_key
> +THUMB(	sub	r3,pc,#4	)
>  	teq	r0,#0
>  	moveq	r0,#-1
>  	beq	.Labrt
> @@ -843,8 +845,9 @@ AES_Td:
>  @ 		 const AES_KEY *key) {
>  .align	5
>  ENTRY(AES_decrypt)
> -	sub	r3,pc,#8		@ AES_decrypt
> -	stmdb   sp!,{r1,r4-r12,lr}
> +ARM(	sub	r3,pc,#8	)	@ AES_decrypt
> +THUMB(	sub	r3,pc,#4	)
> +		stmdb   sp!,{r1,r4-r12,lr}
>  	mov	r12,r0		@ inp
>  	mov	r11,r2
>  	sub	r10,r3,#AES_decrypt-AES_Td		@ Td
> -- 
> 1.8.1.2
> 



More information about the linux-arm-kernel mailing list