From: Dmitry V. Levin Date: Tue, 23 May 2017 23:20:18 +0000 (+0000) Subject: Fix compat personality support for sgetmask syscall X-Git-Tag: v4.17~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b97ee486bc94f0480df6ae6fc12b784025f3da3;p=strace Fix compat personality support for sgetmask syscall * signal.c (SYS_FUNC(sgetmask)): Replace sprintsigmask_val with sprint_old_sigmask_val. * tests/sxetmask.c (main): Check decoding of signal mask containing RT signals. --- diff --git a/signal.c b/signal.c index a384f1fa..2c21f906 100644 --- a/signal.c +++ b/signal.c @@ -397,7 +397,7 @@ SYS_FUNC(signal) SYS_FUNC(sgetmask) { if (exiting(tcp) && !syserror(tcp)) { - tcp->auxstr = sprintsigmask_val("mask ", tcp->u_rval); + tcp->auxstr = sprint_old_sigmask_val("mask ", tcp->u_rval); return RVAL_HEX | RVAL_STR; } return 0; diff --git a/tests/sxetmask.c b/tests/sxetmask.c index 15543196..0ede9ad7 100644 --- a/tests/sxetmask.c +++ b/tests/sxetmask.c @@ -99,6 +99,18 @@ main(void) if (uget.old_mask != (unsigned long) rc) error_msg_and_fail("sigprocmask returned %#lx", uget.old_mask); + + if (sizeof(long) > 4) { + sigaddset(&uset.libc_mask, 32 + 27); + if (sigprocmask(SIG_SETMASK, &uset.libc_mask, NULL)) + perror_msg_and_fail("sigprocmask"); + rc = k_sgetmask(); + printf("sgetmask() = %#lx" + " (mask [USR1 USR2 RT_27])\n", rc); + if (uset.old_mask != (unsigned long) rc) + error_msg_and_fail("sigprocmask set %#lx", + uset.old_mask); + } } puts("+++ exited with 0 +++");