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

Ard Biesheuvel ard.biesheuvel at linaro.org
Tue Sep 17 12:41:04 EDT 2013


On 17 September 2013 18:35, Nicolas Pitre <nicolas.pitre at linaro.org> wrote:
> 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?
>

Excellent point. I am just being overly cautious perhaps, but my idea
was to stay as close as possible to the original.
Let me check if it builds with adr (no adrl in thumb), if so I will respin.

-- 
Ard.


>
>>
>> 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