[PATCH v9 4/4] elf: Fix runtime linker auditing on aarch64 (BZ #26643)

Adhemerval Zanella adhemerval.zanella@linaro.org
Tue Jan 11 18:12:04 GMT 2022



On 11/01/2022 14:09, Szabolcs Nagy wrote:
> The 01/11/2022 13:49, Adhemerval Zanella wrote:
>> On 11/01/2022 08:16, Szabolcs Nagy wrote:
>>> The 01/03/2022 10:25, Adhemerval Zanella via Libc-alpha wrote:
>>>> @@ -142,13 +143,17 @@ _dl_runtime_profile:
>>>>  	   Stack frame layout:
>>>>  	   [sp,   #...] lr
>>>>  	   [sp,   #...] &PLTGOT[n]
>>>> -	   [sp,    #96] La_aarch64_regs
>>>> -	   [sp,    #48] La_aarch64_retval
>>>> -	   [sp,    #40] frame size return from pltenter
>>>> -	   [sp,    #32] dl_profile_call saved x1
>>>> -	   [sp,    #24] dl_profile_call saved x0
>>>> -	   [sp,    #16] t1
>>>> -	   [sp,     #0] x29, lr   <- x29
>>>> +	   -----------------------
>>>> +	   [sp,   #384] La_aarch64_regs::lr_xreg (x0-x8)
>>>> +	   [sp,   #256] La_aarch64_regs::lr_vreg (q0-q7)
>>>> +	   [sp,   #240] La_aarch64_regs::sp and La_aarch64_regs::lr
>>>> +	   [sp,   #176] La_aarch64_retval::lrv_xreg (x0-x7)
>>>> +	   [sp,   # 48] La_aarch64_retval::lrv_vreg (q0-q7)
>>>> +	   [sp,   # 40] frame size return from pltenter
>>>> +	   [sp,   # 32] dl_profile_call saved x1
>>>> +	   [sp,   # 24] dl_profile_call saved x0
>>>> +	   [sp,   # 16] t1
>>>> +	   [sp,   #  0] x29, lr   <- x29
>>>>  	 */
>>>
>>> the layout in the comment looks backwards.
>>
>> It follows the convention of the about layout:
>>
>>         /* AArch64 we get called with:
>>            ip0          &PLTGOT[2]
>>            ip1          temp(dl resolver entry point)
>>            [sp, #8]     lr
>>            [sp, #0]     &PLTGOT[n]
>> 	[...]
>>
> 
> i mean the order of the fields is wrong.
> 
> lr_xreg has larger address than lr_vreg
> but in the struct it is the opposite.
> 
> i think you need to reorder the fields.
> (but we don't have to document the exact offsets
> here, so a simplified comment is fine too)

Indeed, it should be:

           [sp,   #384] La_aarch64_regs::lr_xreg (q0-q7)
           [sp,   #256] La_aarch64_regs::lr_vreg (x0-x8)
           [sp,   #240] La_aarch64_regs::sp and La_aarch64_regs::lr
           [sp,   #176] La_aarch64_retval::lrv_xreg (q0-q7)
           [sp,    #48] La_aarch64_retval::lrv_vreg (x0-x7)
           [sp,    #40] frame size return from pltenter
           [sp,    #32] dl_profile_call saved x1
           [sp,    #24] dl_profile_call saved x0
           [sp,    #16] t1
           [sp,     #0] x29, lr   <- x29

I have fixed it.


More information about the Libc-alpha mailing list