[PATCH 1/2] powerpc/32: fix syscall wrappers with 64-bit arguments of unaligned register-pairs

Andrew Donnellan ajd at linux.ibm.com
Wed Oct 12 18:56:07 AEDT 2022


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 <Jason at zx2c4.com>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---

Fixes: 7e92e01b72452 ("powerpc: Provide syscall wrapper")

-- 
Andrew Donnellan    OzLabs, ADL Canberra
ajd at linux.ibm.com   IBM Australia Limited



More information about the Linuxppc-dev mailing list