Skip to content

Commit d388256

Browse files
committed
syscalls: fix compat_sys_io_pgetevents_time64 usage
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 6431e92 ("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: 48166e6 ("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>
1 parent 4b8e88e commit d388256

File tree

9 files changed

+9
-9
lines changed

9 files changed

+9
-9
lines changed

arch/arm64/include/asm/unistd32.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ __SYSCALL(__NR_pselect6_time64, compat_sys_pselect6_time64)
840840
#define __NR_ppoll_time64 414
841841
__SYSCALL(__NR_ppoll_time64, compat_sys_ppoll_time64)
842842
#define __NR_io_pgetevents_time64 416
843-
__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents)
843+
__SYSCALL(__NR_io_pgetevents_time64, compat_sys_io_pgetevents_time64)
844844
#define __NR_recvmmsg_time64 417
845845
__SYSCALL(__NR_recvmmsg_time64, compat_sys_recvmmsg_time64)
846846
#define __NR_mq_timedsend_time64 418

arch/mips/kernel/syscalls/syscall_n32.tbl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@
354354
412 n32 utimensat_time64 sys_utimensat
355355
413 n32 pselect6_time64 compat_sys_pselect6_time64
356356
414 n32 ppoll_time64 compat_sys_ppoll_time64
357-
416 n32 io_pgetevents_time64 sys_io_pgetevents
357+
416 n32 io_pgetevents_time64 compat_sys_io_pgetevents_time64
358358
417 n32 recvmmsg_time64 compat_sys_recvmmsg_time64
359359
418 n32 mq_timedsend_time64 sys_mq_timedsend
360360
419 n32 mq_timedreceive_time64 sys_mq_timedreceive

arch/mips/kernel/syscalls/syscall_o32.tbl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@
403403
412 o32 utimensat_time64 sys_utimensat sys_utimensat
404404
413 o32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
405405
414 o32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
406-
416 o32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents
406+
416 o32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
407407
417 o32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
408408
418 o32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend
409409
419 o32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive

arch/powerpc/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@
502502
412 32 utimensat_time64 sys_utimensat sys_utimensat
503503
413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
504504
414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
505-
416 32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents
505+
416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
506506
417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
507507
418 32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend
508508
419 32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive

arch/s390/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@
418418
412 32 utimensat_time64 - sys_utimensat
419419
413 32 pselect6_time64 - compat_sys_pselect6_time64
420420
414 32 ppoll_time64 - compat_sys_ppoll_time64
421-
416 32 io_pgetevents_time64 - sys_io_pgetevents
421+
416 32 io_pgetevents_time64 - compat_sys_io_pgetevents_time64
422422
417 32 recvmmsg_time64 - compat_sys_recvmmsg_time64
423423
418 32 mq_timedsend_time64 - sys_mq_timedsend
424424
419 32 mq_timedreceive_time64 - sys_mq_timedreceive

arch/sparc/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@
461461
412 32 utimensat_time64 sys_utimensat sys_utimensat
462462
413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
463463
414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
464-
416 32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents
464+
416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
465465
417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
466466
418 32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend
467467
419 32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive

arch/x86/entry/syscalls/syscall_32.tbl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@
420420
412 i386 utimensat_time64 sys_utimensat
421421
413 i386 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
422422
414 i386 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
423-
416 i386 io_pgetevents_time64 sys_io_pgetevents
423+
416 i386 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64
424424
417 i386 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
425425
418 i386 mq_timedsend_time64 sys_mq_timedsend
426426
419 i386 mq_timedreceive_time64 sys_mq_timedreceive

include/uapi/asm-generic/unistd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ __SC_COMP(__NR_pselect6_time64, sys_pselect6, compat_sys_pselect6_time64)
737737
#define __NR_ppoll_time64 414
738738
__SC_COMP(__NR_ppoll_time64, sys_ppoll, compat_sys_ppoll_time64)
739739
#define __NR_io_pgetevents_time64 416
740-
__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents)
740+
__SC_COMP(__NR_io_pgetevents_time64, sys_io_pgetevents, compat_sys_io_pgetevents_time64)
741741
#define __NR_recvmmsg_time64 417
742742
__SC_COMP(__NR_recvmmsg_time64, sys_recvmmsg, compat_sys_recvmmsg_time64)
743743
#define __NR_mq_timedsend_time64 418

kernel/sys_ni.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ COND_SYSCALL(io_getevents_time32);
4646
COND_SYSCALL(io_getevents);
4747
COND_SYSCALL(io_pgetevents_time32);
4848
COND_SYSCALL(io_pgetevents);
49-
COND_SYSCALL_COMPAT(io_pgetevents_time32);
5049
COND_SYSCALL_COMPAT(io_pgetevents);
50+
COND_SYSCALL_COMPAT(io_pgetevents_time64);
5151
COND_SYSCALL(io_uring_setup);
5252
COND_SYSCALL(io_uring_enter);
5353
COND_SYSCALL(io_uring_register);

0 commit comments

Comments
 (0)