pselect.c: Pass a pointer to SYSCALL_CANCEL [BZ #26606]

commit a92f4e6299fe0e3cb6f77e79de00817aece501ce
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
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].
This commit is contained in:
H.J. Lu 2020-09-11 19:36:12 -07:00
parent b8d3e8fbaa
commit 4b564f347f

View File

@ -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;