arm: Avoid UB in elf_machine_rel()
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Tue Jun 25 18:52:31 GMT 2024
On 25/06/24 14:35, Andreas K. Huettel wrote:
> Listed as accepted; should this still be pushed?
> Cheers -A
>
LGTM, minor nit below.
>
>> I haven't build this one, as I'm just doing it locally and don't
>> have
>> everything setup here.
>> ---
>>
>> sysdeps/arm/dl-machine.h | 9 ++++-----
>> 1 file changed, 4 insertions(+), 5 deletions(-)
>>
>> diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
>> index 68dcb96d9d..6bb3917340 100644
>> --- a/sysdeps/arm/dl-machine.h
>> +++ b/sysdeps/arm/dl-machine.h
>> @@ -402,10 +402,7 @@ elf_machine_rel (struct link_map *map, struct
>> r_scope_elem *scope[],>
>> break;
>>
>> case R_ARM_ABS32:
>> {
>>
>> - struct unaligned
>> - {
>> - Elf32_Addr x;
>> - } __attribute__ ((packed, may_alias));
>> + ElfW(Addr) tmp;
>>
>> # ifndef RTLD_BOOTSTRAP
>>
>> /* This is defined in rtld.c, but nowhere in the static
>>
>> libc.a; make the reference weak so static programs can
>>
>> @@ -425,7 +422,9 @@ elf_machine_rel (struct link_map *map, struct
>> r_scope_elem *scope[],>
>> value -= SYMBOL_ADDRESS (map, refsym, true);
>>
>> # endif
>>
>> /* Support relocations on mis-aligned offsets. */
>>
>> - ((struct unaligned *) reloc_addr)->x += value;
>> + memcpy(&tmp, reloc_addr, sizeof tmp);
Space after function name.
>> + tmp += value;
>> + memcpy (reloc_addr, &tmp, sizeof tmp);
>>
>> break;
>>
>> }
>>
>> case R_ARM_TLS_DESC:
>
More information about the Libc-alpha
mailing list