From: H.J. Lu Date: Sat, 12 Sep 2020 02:36:12 +0000 (-0700) Subject: pselect.c: Pass a pointer to SYSCALL_CANCEL [BZ #26606] X-Git-Tag: glibc-2.33~483 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b564f347fdcd021dbb6c1ada98a18249d9e888a;p=thirdparty%2Fglibc.git pselect.c: Pass a pointer to SYSCALL_CANCEL [BZ #26606] commit a92f4e6299fe0e3cb6f77e79de00817aece501ce Author: Adhemerval Zanella Date: Mon Jul 6 13:27:12 2020 -0300 linux: Add time64 pselect support changed pselect.c to r = SYSCALL_CANCEL (pselect6_time64, nfds, readfds, writefds, exceptfds, timeout, ((__syscall_ulong_t[]){ (uintptr_t) sigmask, __NSIG_BYTES })); which doesn't work with x32's ARGIFY and data passed to syscall isn't initialized with sigmask and __NSIG_BYTES. Change to __syscall_ulong_t data[2] = { (uintptr_t) sigmask, __NSIG_BYTES }; r = SYSCALL_CANCEL (pselect6_time64, nfds, readfds, writefds, exceptfds, timeout, data); fixes [BZ #26606]. --- diff --git a/sysdeps/unix/sysv/linux/pselect.c b/sysdeps/unix/sysv/linux/pselect.c index ed361210234..165b2b5e666 100644 --- a/sysdeps/unix/sysv/linux/pselect.c +++ b/sysdeps/unix/sysv/linux/pselect.c @@ -44,10 +44,13 @@ __pselect64 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, int r; if (supports_time64 ()) { + /* NB: This is required by ARGIFY used in x32 internal_syscallN. */ + __syscall_ulong_t data[2] = + { + (uintptr_t) sigmask, __NSIG_BYTES + }; r = SYSCALL_CANCEL (pselect6_time64, nfds, readfds, writefds, exceptfds, - timeout, - ((__syscall_ulong_t[]){ (uintptr_t) sigmask, - __NSIG_BYTES })); + timeout, data); if (r == 0 || errno != ENOSYS) return r;