parisc: io_pgetevents_time64() needs compat syscall in 32-bit compat mode
authorHelge Deller <deller@gmx.de>
Mon, 1 Aug 2022 15:36:15 +0000 (17:36 +0200)
committerHelge Deller <deller@gmx.de>
Mon, 1 Aug 2022 16:43:24 +0000 (18:43 +0200)
For all syscalls in 32-bit compat mode on 64-bit kernels the upper
32-bits of the 64-bit registers are zeroed out, so a negative 32-bit
signed value will show up as positive 64-bit signed value.

This behaviour breaks the io_pgetevents_time64() syscall which expects
signed 64-bit values for the "min_nr" and "nr" parameters.
Fix this by switching to the compat_sys_io_pgetevents_time64() syscall,
which uses "compat_long_t" types for those parameters.

Cc: <stable@vger.kernel.org> # v5.1+
Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/kernel/syscalls/syscall.tbl

index 68b46fe..8a99c99 100644 (file)
 412    32      utimensat_time64                sys_utimensat                   sys_utimensat
 413    32      pselect6_time64                 sys_pselect6                    compat_sys_pselect6_time64
 414    32      ppoll_time64                    sys_ppoll                       compat_sys_ppoll_time64
-416    32      io_pgetevents_time64            sys_io_pgetevents               sys_io_pgetevents
+416    32      io_pgetevents_time64            sys_io_pgetevents               compat_sys_io_pgetevents_time64
 417    32      recvmmsg_time64                 sys_recvmmsg                    compat_sys_recvmmsg_time64
 418    32      mq_timedsend_time64             sys_mq_timedsend                sys_mq_timedsend
 419    32      mq_timedreceive_time64          sys_mq_timedreceive             sys_mq_timedreceive