Re: [PATCH v11 25/25] x86/cet/shstk: Add arch_prctl functions for shadow stack

From: Yu, Yu-cheng
Date: Tue Sep 01 2020 - 14:24:25 EST


On 9/1/2020 11:17 AM, Florian Weimer wrote:
* Yu-cheng Yu:

On 9/1/2020 10:50 AM, Florian Weimer wrote:
* Yu-cheng Yu:

Like other arch_prctl()'s, this parameter was 'unsigned long'
earlier. The idea was, since this arch_prctl is only implemented for
the 64-bit kernel, we wanted it to look as 64-bit only. I will change
it back to 'unsigned long'.
What about x32? In general, long is rather problematic for x32.

The problem is the size of 'long', right?
Because this parameter is passed in a register, and only the lower
bits are used, x32 works as well.

The userspace calling convention leaves the upper 32-bit undefined.
Therefore, this only works by accident if the kernel does not check that
the upper 32-bit are zero, which is probably a kernel bug.

It's unclear to me what you are trying to accomplish. Why do you want
to use unsigned long here? The correct type appears to be unsigned int.
This correctly expresses that the upper 32 bits of the register do not
matter.

Yes, you are right. I will make it 'unsigned int'.

Thanks,
Yu-cheng