On Wed, 2022-10-12 at 13:53 +1000, Nicholas Piggin wrote: > powerpc 32-bit system call (and function) calling convention for 64- > bit > arguments requires the next available odd-pair (two sequential > registers > with the first being odd-numbered) from the standard register > argument > allocation. > > The first argument register is r3, so a 64-bit argument that appears > at > an even position in the argument list must skip a register (unless > there > were preceeding 64-bit arguments, which might throw things off). This > requires non-standard compat definitions to deal with the holes in > the > argument register allocation. > > With pt_regs syscall wrappers which use a standard mapper to map > pt_regs > GPRs to function arguments, 32-bit kernels hit the same basic > problem, > the standard definitions don't cope with the unused argument > registers. > > Fix this by having 32-bit kernels share those syscall definitions > with > compat. > > Thanks to Jason for spending a lot of time finding and bisecting this > and > developing a trivial reproducer. The perfect bug report. > > Reported-by: Jason A. Donenfeld <ja...@zx2c4.com> > Signed-off-by: Nicholas Piggin <npig...@gmail.com> > ---
Fixes: 7e92e01b72452 ("powerpc: Provide syscall wrapper") -- Andrew Donnellan OzLabs, ADL Canberra a...@linux.ibm.com IBM Australia Limited