From: Arnd Bergmann <a...@arndb.de>

Using sys_io_pgetevents() as the entry point for compat mode tasks
works almost correctly, but misses the sign extension for the min_nr
and nr arguments.

This was addressed on parisc by switching to
compat_sys_io_pgetevents_time64() in commit 6431e92fc827 ("parisc:
io_pgetevents_time64() needs compat syscall in 32-bit compat mode"),
as well as by using more sophisticated system call wrappers on x86 and
s390. However, arm64, mips, powerpc, sparc and riscv still have the
same bug.

Change all of them over to use compat_sys_io_pgetevents_time64()
like parisc already does. This was clearly the intention when the
function was originally added, but it got hooked up incorrectly in
the tables.

Cc: sta...@vger.kernel.org
Fixes: 48166e6ea47d ("y2038: add 64-bit time_t syscalls to all 32-bit 
architectures")
Acked-by: Heiko Carstens <h...@linux.ibm.com> # s390
Signed-off-by: Arnd Bergmann <a...@arndb.de>
---
v2: fix kernel/sys_ni.c which was previously broken only on
parisc. found by kernel build bot.
---
 arch/arm64/include/asm/unistd32.h         | 2 +-
 arch/mips/kernel/syscalls/syscall_n32.tbl | 2 +-
 arch/mips/kernel/syscalls/syscall_o32.tbl | 2 +-
 arch/powerpc/kernel/syscalls/syscall.tbl  | 2 +-
 arch/s390/kernel/syscalls/syscall.tbl     | 2 +-
 arch/sparc/kernel/syscalls/syscall.tbl    | 2 +-
 arch/x86/entry/syscalls/syscall_32.tbl    | 2 +-
 include/uapi/asm-generic/unistd.h         | 2 +-
 kernel/sys_ni.c                           | 2 +-
 9 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/arm64/include/asm/unistd32.h 
b/arch/arm64/include/asm/unistd32.h
index 266b96acc014..1386e8e751f2 100644
--- a/arch/arm64/include/asm/unistd32.h
+++ b/arch/arm64/include/asm/unistd32.h
@@ -840,7 +840,7 @@ __SYSCALL(__NR_pselect6_time64, compat_sys_pselect6_time64)
 #define __NR_ppoll_time64 414
 __SYSCALL(__NR_ppoll_time64, compat_sys_ppoll_time64)
 #define __NR_io_pgetevents_time64 416
-__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents)
+__SYSCALL(__NR_io_pgetevents_time64, compat_sys_io_pgetevents_time64)
 #define __NR_recvmmsg_time64 417
 __SYSCALL(__NR_recvmmsg_time64, compat_sys_recvmmsg_time64)
 #define __NR_mq_timedsend_time64 418
diff --git a/arch/mips/kernel/syscalls/syscall_n32.tbl 
b/arch/mips/kernel/syscalls/syscall_n32.tbl
index cc869f5d5693..953f5b7dc723 100644
--- a/arch/mips/kernel/syscalls/syscall_n32.tbl
+++ b/arch/mips/kernel/syscalls/syscall_n32.tbl
@@ -354,7 +354,7 @@
 412    n32     utimensat_time64                sys_utimensat
 413    n32     pselect6_time64                 compat_sys_pselect6_time64
 414    n32     ppoll_time64                    compat_sys_ppoll_time64
-416    n32     io_pgetevents_time64            sys_io_pgetevents
+416    n32     io_pgetevents_time64            compat_sys_io_pgetevents_time64
 417    n32     recvmmsg_time64                 compat_sys_recvmmsg_time64
 418    n32     mq_timedsend_time64             sys_mq_timedsend
 419    n32     mq_timedreceive_time64          sys_mq_timedreceive
diff --git a/arch/mips/kernel/syscalls/syscall_o32.tbl 
b/arch/mips/kernel/syscalls/syscall_o32.tbl
index 008ebe60263e..85751c9b9cdb 100644
--- a/arch/mips/kernel/syscalls/syscall_o32.tbl
+++ b/arch/mips/kernel/syscalls/syscall_o32.tbl
@@ -403,7 +403,7 @@
 412    o32     utimensat_time64                sys_utimensat                   
sys_utimensat
 413    o32     pselect6_time64                 sys_pselect6                    
compat_sys_pselect6_time64
 414    o32     ppoll_time64                    sys_ppoll                       
compat_sys_ppoll_time64
-416    o32     io_pgetevents_time64            sys_io_pgetevents               
sys_io_pgetevents
+416    o32     io_pgetevents_time64            sys_io_pgetevents               
compat_sys_io_pgetevents_time64
 417    o32     recvmmsg_time64                 sys_recvmmsg                    
compat_sys_recvmmsg_time64
 418    o32     mq_timedsend_time64             sys_mq_timedsend                
sys_mq_timedsend
 419    o32     mq_timedreceive_time64          sys_mq_timedreceive             
sys_mq_timedreceive
diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl 
b/arch/powerpc/kernel/syscalls/syscall.tbl
index 3656f1ca7a21..c6b0546b284d 100644
--- a/arch/powerpc/kernel/syscalls/syscall.tbl
+++ b/arch/powerpc/kernel/syscalls/syscall.tbl
@@ -502,7 +502,7 @@
 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
diff --git a/arch/s390/kernel/syscalls/syscall.tbl 
b/arch/s390/kernel/syscalls/syscall.tbl
index bd0fee24ad10..01071182763e 100644
--- a/arch/s390/kernel/syscalls/syscall.tbl
+++ b/arch/s390/kernel/syscalls/syscall.tbl
@@ -418,7 +418,7 @@
 412    32      utimensat_time64        -                               
sys_utimensat
 413    32      pselect6_time64         -                               
compat_sys_pselect6_time64
 414    32      ppoll_time64            -                               
compat_sys_ppoll_time64
-416    32      io_pgetevents_time64    -                               
sys_io_pgetevents
+416    32      io_pgetevents_time64    -                               
compat_sys_io_pgetevents_time64
 417    32      recvmmsg_time64         -                               
compat_sys_recvmmsg_time64
 418    32      mq_timedsend_time64     -                               
sys_mq_timedsend
 419    32      mq_timedreceive_time64  -                               
sys_mq_timedreceive
diff --git a/arch/sparc/kernel/syscalls/syscall.tbl 
b/arch/sparc/kernel/syscalls/syscall.tbl
index ac6c281ccfe0..b354139b40be 100644
--- a/arch/sparc/kernel/syscalls/syscall.tbl
+++ b/arch/sparc/kernel/syscalls/syscall.tbl
@@ -461,7 +461,7 @@
 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
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl 
b/arch/x86/entry/syscalls/syscall_32.tbl
index 7fd1f57ad3d3..d6ebcab1d8b2 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -420,7 +420,7 @@
 412    i386    utimensat_time64        sys_utimensat
 413    i386    pselect6_time64         sys_pselect6                    
compat_sys_pselect6_time64
 414    i386    ppoll_time64            sys_ppoll                       
compat_sys_ppoll_time64
-416    i386    io_pgetevents_time64    sys_io_pgetevents
+416    i386    io_pgetevents_time64    sys_io_pgetevents               
compat_sys_io_pgetevents_time64
 417    i386    recvmmsg_time64         sys_recvmmsg                    
compat_sys_recvmmsg_time64
 418    i386    mq_timedsend_time64     sys_mq_timedsend
 419    i386    mq_timedreceive_time64  sys_mq_timedreceive
diff --git a/include/uapi/asm-generic/unistd.h 
b/include/uapi/asm-generic/unistd.h
index d983c48a3b6a..3fdaa573d661 100644
--- a/include/uapi/asm-generic/unistd.h
+++ b/include/uapi/asm-generic/unistd.h
@@ -737,7 +737,7 @@ __SC_COMP(__NR_pselect6_time64, sys_pselect6, 
compat_sys_pselect6_time64)
 #define __NR_ppoll_time64 414
 __SC_COMP(__NR_ppoll_time64, sys_ppoll, compat_sys_ppoll_time64)
 #define __NR_io_pgetevents_time64 416
-__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents)
+__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents, 
compat_sys_io_pgetevents_time64)
 #define __NR_recvmmsg_time64 417
 __SC_COMP(__NR_recvmmsg_time64, sys_recvmmsg, compat_sys_recvmmsg_time64)
 #define __NR_mq_timedsend_time64 418
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index d7eee421d4bc..b696b85ac63e 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -46,8 +46,8 @@ COND_SYSCALL(io_getevents_time32);
 COND_SYSCALL(io_getevents);
 COND_SYSCALL(io_pgetevents_time32);
 COND_SYSCALL(io_pgetevents);
-COND_SYSCALL_COMPAT(io_pgetevents_time32);
 COND_SYSCALL_COMPAT(io_pgetevents);
+COND_SYSCALL_COMPAT(io_pgetevents_time64);
 COND_SYSCALL(io_uring_setup);
 COND_SYSCALL(io_uring_enter);
 COND_SYSCALL(io_uring_register);
-- 
2.39.2

Reply via email to