Commit d3882564 authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

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 6431e92f ("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: 48166e6e ("y2038: add 64-bit time_t syscalls to all 32-bit architectures")
Acked-by: Heiko Carstens <hca@linux.ibm.com> # s390
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 4b8e88e5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
Loading