[ipxe-devel] [PATCH 1/1] [efi] avoid unaligned read in efi_devpath_end()

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Mar 28 19:23:11 UTC 2018


On 03/28/2018 09:12 PM, Michael Brown wrote:
> On 28/03/18 20:10, Heinrich Schuchardt wrote:
>>> There's no way that the code:
>>>
>>>> -             ( ( path->Length[1] << 8 ) | path->Length[0] ) );
>>>
>>> should ever be able to produce an unaligned access abort, since it just
>>> dereferences individual bytes.  What do you see if you disassemble the
>>> object code?
>>
>> I put a DGBC before and after the access. And this is were the interrupt
>> occurs.
>>
>> I do not know how to disassemble the object code. Which files do you
>> need?
> 
> You should be able to use:
> 
>   objdump -dS bin-arm32-efi/efi_utils.o
> 
> Michael
> 
> 

00000000 <efi_devpath_end>:
   0:   7803            ldrb    r3, [r0, #0]  <<< Reading on byte
   2:   2b7f            cmp     r3, #127        ; 0x7f
   4:   d100            bne.n   8 <efi_devpath_end+0x8>
   6:   4770            bx      lr
   8:   8843            ldrh    r3, [r0, #2]  <<< Reading two bytes
infocenter.arm.com/help/topic/com.arm.doc.faqs/ka15414.html
LDRH/STRH - address must be 2-byte aligned.

   a:   4418            add     r0, r3
   c:   e7f8            b.n     0 <efi_devpath_end>

Regards

Heinrich



More information about the ipxe-devel mailing list