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