[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v1 3/3] xen/livepatch/ARM32: Don't crash on livepatches loaded with wrong alignment.



>>> Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> 07/11/17 10:34 PM >>>
>On Tue, Jul 11, 2017 at 02:06:09PM -0600, Jan Beulich wrote:
>> >>> Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> 07/11/17 6:53 PM >>>
>> >This issue was observed on ARM32 with a cross compiler for the
>> >livepatches. Mainly the livepatches .data section size was not
>> >aligned to the section alignment:
>> >
>> >ARM32 native:
>> >Contents of section .rodata:
>>  >0000 68695f66 756e6300 63686563 6b5f666e  hi_func.check_fn
>>  >0010 63000000 78656e5f 65787472 615f7665  c...xen_extra_ve
>>  >0020 7273696f 6e000000                    rsion...
>> >
>> >ARM32 cross compiler:
>> >Contents of section .rodata:
>>  >0000 68695f66 756e6300 63686563 6b5f666e  hi_func.check_fn
>>  >0010 63000000 78656e5f 65787472 615f7665  c...xen_extra_ve
>>  >0020 7273696f 6e00                        rsion.
>> >
>> >And when we loaded it:
>> >
>> >native:
>> >
>> >(XEN) livepatch.c:413: livepatch: xen_hello_world: Loaded .text at 00a02000
>> >(XEN) livepatch.c:413: livepatch: xen_hello_world: Loaded .rodata at 
>> >00a04024
>> >(XEN) livepatch.c:413: livepatch: xen_hello_world: Loaded .altinstructions 
>> >at 00a0404c
>> >
>> >cross compiler:
>> >(XEN) livepatch.c:413: livepatch: xen_hello_world: Loaded .text at 00a02000
>> >(XEN) livepatch.c:413: livepatch: xen_hello_world: Loaded .rodata at 
>> >00a04024
>> >(XEN) livepatch.c:413: livepatch: xen_hello_world: Loaded .altinstructions 
>> >at 00a0404a
>> >
>> >(See 4a vs 4c)
>> >
>> >native readelf:
>>   >[ 4] .rodata           PROGBITS        00000000 000164 000028 00   A  0   
>> 0  4
>>   >[ 5] .altinstructions  PROGBITS        00000000 00018c 00000c 00   A  0   
>> 0  1
>> >
>> >cross compiler readelf --sections:
>>   >[ 4] .rodata           PROGBITS        00000000 000164 000026 00   A  0   
>> 0  4
>>   >[ 5] .altinstructions  PROGBITS        00000000 00018a 00000c 00   A  0   
>> 0  1
>> >
>> >And as can be seen the .altinstructions have alignment of 1 which from
>> >'man elf' is: "Values of zero and one mean no alignment is required."
>> >which means we can ignore it.
>> >
>> >However ignoring this will result in a crash as when we started processing
>> >".rel.altinstructions" for ".altinstructions" with a cross-compiled payload
>> >we would end up poking in an section that was not aligned properly in memory
>> >and crash.
>> 
>> Which section is it that would not be aligned properly in memory?
>
>.altinstructions, thanks to .rodata not being padded properly.
>
>> .altinstructions, with an alignment of 1, can be placed anywhere. You
>> shouldn't enforce extra alignment. If higher alignment is needed, the
>> code producing this section emission needs to be fixed.
>
>And there is the path to madness :-) We would need to provide an
>linker map to make sure that they are with the correct alignment.

Why? I'd expect it to be the assembler directives creating contributions to
that section to simply lack a .align or alike. And indeed, there's nothing
like that in ARM's alternative.h. Please see commit 01fe4da624 ("x86: force
suitable alignment in sources rather than in linker script") for further
context.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.