]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
syscalls: fix compat_sys_io_pgetevents_time64 usage
authorArnd Bergmann <arnd@arndb.de>
Thu, 20 Jun 2024 12:16:37 +0000 (14:16 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 5 Jul 2024 07:31:59 +0000 (09:31 +0200)
commit d3882564a77c21eb746ba5364f3fa89b88de3d61 upstream.

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: stable@vger.kernel.org
Fixes: 48166e6ea47d ("y2038: add 64-bit time_t syscalls to all 32-bit architectures")
Acked-by: Heiko Carstens <hca@linux.ibm.com> # s390
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/arm64/include/asm/unistd32.h
arch/mips/kernel/syscalls/syscall_n32.tbl
arch/mips/kernel/syscalls/syscall_o32.tbl
arch/powerpc/kernel/syscalls/syscall.tbl
arch/s390/kernel/syscalls/syscall.tbl
arch/sparc/kernel/syscalls/syscall.tbl
arch/x86/entry/syscalls/syscall_32.tbl
include/uapi/asm-generic/unistd.h
kernel/sys_ni.c

index 604a2053d00670b73c0da75a224d8aaf13828e25..f464a2e0b4880921562ec7bcf91206cea5f9ede5 100644 (file)
@@ -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
index 253ff994ed2eceddb1b20c9bf813aa9bcf49c48e..5d952a57c0eededa22b3be21609f1c9fc65a44d4 100644 (file)
 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
index 8f243e35a7b209ff2771b283a5d8261c12b2345d..7ab572040f53485ebfdfba008c15748550bcd082 100644 (file)
 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
index df585d804790e8aef4b167215bf3170d0c10db95..1195f88199caa958e9885d43ec1f48040801680f 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
index 799147658dee20dde3993818f977579429898e4d..42acea15441dd5bb73ae502e110e10e47271a403 100644 (file)
 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
index 5399fab3ce631aa699db3b732b955d1e319f5d24..0ddddd3e38c08a9a1bba88f2997861321b99d3fa 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
index 320480a8db4f834dfee790b9a41e5516a88674f6..81e60b37128fdd84a1640a4d2b8664f67616f583 100644 (file)
 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
index 45fa180cc56adf335ebfa7c2c6bf85b9704e25fa..28973a89cdc7f106e49bdd1a2d2b25cadd4276f4 100644 (file)
@@ -805,7 +805,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)
+__SC_COMP(__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
index 860b2dcf3ac465973493a911ecf4fedda79ba049..f4922c60a615b4a8a001d64a383e89927b048631 100644 (file)
@@ -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);