* tapset/linux/syscalls2.stp (syscall.sigprocmask): Fix nesting.
(syscall.tgkill): Fix types.
* tapset/linux/nd_syscalls2.stp (nd_syscall.sigprocmask): Fix nesting.
* runtime/linux/compat_unistd.h: Add fake __NR_sigprocmask.
* testsuite/systemtap.syscall/signal.c: Add more tests.
* testsuite/systemtap.syscall/uid.c: Ditto.
#ifndef __NR_setsockopt
#define __NR_setsockopt (__NR_syscall_max + 1)
#endif
+#ifndef __NR_sigprocmask
+#define __NR_sigprocmask (__NR_syscall_max + 1)
+#endif
#if defined(__x86_64__)
# compat_old_sigset_t __user *oset)
#
#
-probe nd_syscall.sigprocmask = kprobe.function("sys_sigprocmask") ?,
+probe nd_syscall.sigprocmask = __nd_syscall.sigprocmask ?,
kprobe.function("compat_sys_sigprocmask") ?
{
name = "sigprocmask"
oldset_uaddr = pointer_arg(3)
argstr = sprintf("%s, %p, %p", how_str, set_uaddr, oldset_uaddr)
}
-probe nd_syscall.sigprocmask.return = kprobe.function("sys_sigprocmask").return ?,
+probe __nd_syscall.sigprocmask = kprobe.function("sys_sigprocmask") ?
+{
+ @__syscall_gate(%{ __NR_sigprocmask %})
+}
+probe nd_syscall.sigprocmask.return = __nd_syscall.sigprocmask.return ?,
kprobe.function("compat_sys_sigprocmask").return ?
{
name = "sigprocmask"
retstr = returnstr(1)
}
+probe __nd_syscall.sigprocmask.return =
+ kprobe.function("sys_sigprocmask").return ?
+{
+ @__syscall_gate(%{ __NR_sigprocmask %})
+}
# sigreturn __________________________________________________
# int sys_sigreturn(unsigned long __unused)
}
probe __syscall.sigprocmask = kernel.function("sys_sigprocmask").call ?
{
+ @__syscall_gate(%{ __NR_sigprocmask %})
oldset_uaddr = $oset
}
probe __syscall.compat_sigprocmask =
{
oldset_uaddr = __uint32($oset)
}
-probe syscall.sigprocmask.return = kernel.function("sys_sigprocmask").return ?,
+probe syscall.sigprocmask.return = __syscall.sigprocmask.return ?,
kernel.function("compat_sys_sigprocmask").return ?
{
name = "sigprocmask"
retstr = return_str(1, $return)
}
+probe __syscall.sigprocmask.return =
+ kernel.function("sys_sigprocmask").return ?
+{
+ @__syscall_gate(%{ __NR_sigprocmask %})
+}
# sigreturn __________________________________________________
# int sys_sigreturn(unsigned long __unused)
probe syscall.tgkill = kernel.function("sys_tgkill").call
{
name = "tgkill"
- tgid = $tgid
- pid = $pid
- sig = $sig
- argstr = sprintf("%d, %d, %s", $tgid, $pid, _signal_name($sig))
+ tgid = __int32($tgid)
+ pid = __int32($pid)
+ sig = __int32($sig)
+ argstr = sprintf("%d, %d, %s", __int32($tgid), __int32($pid),
+ _signal_name(__int32($sig)))
}
probe syscall.tgkill.return = kernel.function("sys_tgkill").return
{
syscall (SYS_signal, SIGUSR1, sig_act_handler);
//staptest// signal (SIGUSR1, XXXX) = 0
+
+ syscall (SYS_signal, -1, sig_act_handler);
+ //staptest// signal (0x[f]+, XXXX) = -NNNN
+
+ syscall (SYS_signal, SIGUSR1, -1);
+#ifdef __s390__
+ //staptest// signal (SIGUSR1, 0x[7]?[f]+) = NNNN
+#else
+ //staptest// signal (SIGUSR1, 0x[f]+) = NNNN
+#endif
#endif
sigemptyset(&mask);
#else
//staptest// sigprocmask (SIG_UNBLOCK, XXXX, 0x0+) = 0
#endif
+
+ syscall (SYS_sigprocmask, -1, &mask, NULL);
+ /* sigprocmask is unimplemented on powerpc64 */
+#ifdef __powerpc64__
+ //staptest// ni_syscall () = -38 (ENOSYS)
+#else
+ //staptest// sigprocmask (0x[f]+, XXXX, 0x0+) = -NNNN
+#endif
+
+ syscall (SYS_sigprocmask, SIG_UNBLOCK, -1, NULL);
+ /* sigprocmask is unimplemented on powerpc64 */
+#ifdef __powerpc64__
+ //staptest// ni_syscall () = -38 (ENOSYS)
+#else
+#ifdef __s390__
+ //staptest// sigprocmask (SIG_UNBLOCK, 0x[7]?[f]+, 0x0+) = -NNNN (EFAULT)
+#else
+ //staptest// sigprocmask (SIG_UNBLOCK, 0x[f]+, 0x0+) = -NNNN (EFAULT)
+#endif
+#endif
+
+ syscall (SYS_sigprocmask, SIG_UNBLOCK, &mask, -1);
+ /* sigprocmask is unimplemented on powerpc64 */
+#ifdef __powerpc64__
+ //staptest// ni_syscall () = -38 (ENOSYS)
+#else
+#ifdef __s390__
+ //staptest// sigprocmask (SIG_UNBLOCK, XXXX, 0x[7]?[f]+) = -NNNN (EFAULT)
+#else
+ //staptest// sigprocmask (SIG_UNBLOCK, XXXX, 0x[f]+) = -NNNN (EFAULT)
+#endif
+#endif
+
#endif
memset(&sa, 0, sizeof(sa));
//staptest// ni_syscall () = -38 (ENOSYS)
#else
//staptest// sigaction (SIGUSR1, {SIG_IGN}, 0x0+) = 0
+#endif
+
+ syscall (SYS_sigaction, -1, &sa, NULL);
+ /* sigaction is unimplemented on powerpc64 */
+#ifdef __powerpc64__
+ //staptest// ni_syscall () = -38 (ENOSYS)
+#else
+ //staptest// sigaction (0x[f]+, {SIG_IGN}, 0x0+) = NNNN
+#endif
+
+ syscall (SYS_sigaction, SIGUSR1, -1, NULL);
+ /* sigaction is unimplemented on powerpc64 */
+#ifdef __powerpc64__
+ //staptest// ni_syscall () = -38 (ENOSYS)
+#else
+#ifdef __s390__
+ //staptest// sigaction (SIGUSR1, {UNKNOWN}, 0x0+) = -NNNN (EFAULT)
+#else
+ //staptest// sigaction (SIGUSR1, {UNKNOWN}, 0x0+) = -NNNN (EFAULT)
+#endif
+#endif
+
+ syscall (SYS_sigaction, SIGUSR1, &sa, -1);
+ /* sigaction is unimplemented on powerpc64 */
+#ifdef __powerpc64__
+ //staptest// ni_syscall () = -38 (ENOSYS)
+#else
+#ifdef __s390__
+ //staptest// sigaction (SIGUSR1, {SIG_IGN}, 0x[7]?[f]+) = -NNNN (EFAULT)
+#else
+ //staptest// sigaction (SIGUSR1, {SIG_IGN}, 0x[f]+) = -NNNN (EFAULT)
+#endif
#endif
#endif
#ifdef SYS_tgkill
syscall(SYS_tgkill, 1234, 5678, 0);
- //staptest// tgkill (1234, 5678, SIG_0)
+ //staptest// tgkill (1234, 5678, SIG_0) = NNNN
+
+ syscall(SYS_tgkill, -1, 5678, 0);
+ //staptest// tgkill (-1, 5678, SIG_0) = NNNN
+
+ syscall(SYS_tgkill, 1234, -1, 0);
+ //staptest// tgkill (1234, -1, SIG_0) = NNNN
+
+ syscall(SYS_tgkill, 1234, 5678, -1);
+ //staptest// tgkill (1234, 5678, 0x[f]+) = NNNN
#endif
return 0;
egid = getegid();
//staptest// getegid () = NNNN
-
-
setuid(4096);
//staptest// setuid (4096) = NNNN
+ setuid(-1);
+ //staptest// setuid (4294967295) = NNNN
+
seteuid(4097);
//staptest// setresuid (-1, 4097, -1) = NNNN
+ // We can't really test the following, since glibc handles it.
+ // seteuid(-1);
+
getresuid(&ruid, &euid, &suid);
//staptest// getresuid (XXXX, XXXX, XXXX) = 0
+ getresuid((uid_t *)-1, &euid, &suid);
+#ifdef __s390__
+ //staptest// getresuid (0x[7]?[f]+, XXXX, XXXX) = -NNNN (EFAULT)
+#else
+ //staptest// getresuid (0x[f]+, XXXX, XXXX) = -NNNN (EFAULT)
+#endif
+
+ getresuid(&ruid, (uid_t *)-1, &suid);
+#ifdef __s390__
+ //staptest// getresuid (XXXX, 0x[7]?[f]+, XXXX) = -NNNN (EFAULT)
+#else
+ //staptest// getresuid (XXXX, 0x[f]+, XXXX) = -NNNN (EFAULT)
+#endif
+
+ getresuid(&ruid, &euid, (uid_t *)-1);
+#ifdef __s390__
+ //staptest// getresuid (XXXX, XXXX, 0x[7]?[f]+) = -NNNN (EFAULT)
+#else
+ //staptest// getresuid (XXXX, XXXX, 0x[f]+) = -NNNN (EFAULT)
+#endif
+
setgid(4098);
//staptest// setgid (4098) = NNNN
+ setgid(-1);
+ //staptest// setgid (4294967295) = NNNN
+
setegid(4099);
//staptest// setresgid (-1, 4099, -1) = NNNN
+ // We can't really test the following, since glibc handles it.
+ // setegid(-1);
+
getresgid(&rgid, &egid, &sgid);
//staptest// getresgid (XXXX, XXXX, XXXX) = 0
+ getresgid((gid_t *)-1, &egid, &sgid);
+#ifdef __s390__
+ //staptest// getresgid (0x[7]?[f]+, XXXX, XXXX) = -NNNN (EFAULT)
+#else
+ //staptest// getresgid (0x[f]+, XXXX, XXXX) = -NNNN (EFAULT)
+#endif
+
+ getresgid(&rgid, (gid_t *)-1, &sgid);
+#ifdef __s390__
+ //staptest// getresgid (XXXX, 0x[7]?[f]+, XXXX) = -NNNN (EFAULT)
+#else
+ //staptest// getresgid (XXXX, 0x[f]+, XXXX) = -NNNN (EFAULT)
+#endif
+
+ getresgid(&rgid, &egid, (gid_t *)-1);
+#ifdef __s390__
+ //staptest// getresgid (XXXX, XXXX, 0x[7]?[f]+) = -NNNN (EFAULT)
+#else
+ //staptest// getresgid (XXXX, XXXX, 0x[f]+) = -NNNN (EFAULT)
+#endif
+
setreuid(-1, 5000);
- //staptest// setreuid (NNNN, 5000) =
+ //staptest// setreuid (-1, 5000) = NNNN
setreuid(5001, -1);
- //staptest// setreuid (5001, NNNN) =
+ //staptest// setreuid (5001, -1) = NNNN
setregid(-1, 5002);
- //staptest// setregid (NNNN, 5002) =
+ //staptest// setregid (-1, 5002) = NNNN
setregid(5003, -1);
- //staptest// setregid (5003, NNNN) =
+ //staptest// setregid (5003, -1) = NNNN
setfsuid(5004);
- //staptest// setfsuid (5004) =
+ //staptest// setfsuid (5004) = NNNN
setfsgid(5005);
- //staptest// setfsgid (5005) =
+ //staptest// setfsgid (5005) = NNNN
return 0;
}