On Tue, Sep 1, 2020 at 11:17 AM Florian Weimer <fweimer@xxxxxxxxxx> 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. > unsigned int is the correct type since only the lower 32 bits are used. -- H.J.