On 25/09/2024 5:45 pm, Ard Biesheuvel wrote:
> On Wed, 25 Sept 2024 at 18:39, Linus Torvalds
> <torva...@linux-foundation.org> wrote:
>> And we do have special calling conventions that aren't the regular
>> ones, so %rdi might actually be used elsewhere. For example,
>> __get_user_X and __put_user_X all have magical calling conventions:
>> they don't actually use %rdi, but part of the calling convention is
>> that the unused registers aren't modified.
>>
>> Of course, I'm not actually sure you can probe those and trigger this
>> issue, but it all makes me think it's broken.
>>
>> And it's entirely possible that I'm wrong for some reason, but this
>> just _looks_ very very wrong to me.
>>
>> I think you can do this with a "pushq mem" instead, and put the
>> relocation into the memory location.
>>
> I'll change this into
>
>   pushq arch_rethook_trampoline@GOTPCREL(%rip)
>
> which I had originally. I was trying to avoid the load from memory,
> but that obviously only works if the register is not live.

But does that work?  Won't that will push the 8 bytes from the start of
arch_rethook_trampoline, when what's wanted is simply the address of
arch_rethook_trampoline itself.

~Andrew

Reply via email to