]> sourceware.org Git - systemtap.git/commitdiff
PR16716 partial fix: Fix types/nesting in 'syscall.{sigprocmask,tgkill}'.
authorDavid Smith <dsmith@redhat.com>
Thu, 11 Sep 2014 20:25:57 +0000 (15:25 -0500)
committerDavid Smith <dsmith@redhat.com>
Thu, 11 Sep 2014 20:25:57 +0000 (15:25 -0500)
* 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.

runtime/linux/compat_unistd.h
tapset/linux/nd_syscalls2.stp
tapset/linux/syscalls2.stp
testsuite/systemtap.syscall/signal.c
testsuite/systemtap.syscall/uid.c

index edcc103b756dd1360aac704b253c45bc07a270e4..2ce389fa26b062ad31d0e863c40d0151e93410b2 100644 (file)
@@ -55,6 +55,9 @@
 #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__)
 
index 5b446b32a24b19e55d9ac1d8d23fff5d10b8965a..41741edd934a984226d0966f9e05b996565fb162 100644 (file)
@@ -3234,7 +3234,7 @@ probe nd_syscall.sigpending.return = kprobe.function("sys_sigpending").return ?
 #                                       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"
@@ -3245,12 +3245,21 @@ probe nd_syscall.sigprocmask = kprobe.function("sys_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)
index 2fed4a6483001656efda10d516ab68ce37703efe..b8f968bbe088a7b83bc17cc8030cf04a77ff5b78 100644 (file)
@@ -3109,6 +3109,7 @@ probe syscall.sigprocmask = __syscall.sigprocmask ?,
 }
 probe __syscall.sigprocmask = kernel.function("sys_sigprocmask").call ?
 {
+       @__syscall_gate(%{ __NR_sigprocmask %})
        oldset_uaddr = $oset
 }
 probe __syscall.compat_sigprocmask =
@@ -3116,12 +3117,17 @@ 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)
@@ -3549,10 +3555,11 @@ probe syscall.tee.return = kernel.function("sys_tee").return ?
 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
 {
index a98605282cb9719103a94291551b7f30256dd73a..91d69c59633252325ed053223ed0a87735da791d 100644 (file)
@@ -25,6 +25,16 @@ int main()
 
   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);
@@ -46,6 +56,39 @@ int main()
 #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));
@@ -59,12 +102,53 @@ int main()
   //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;
index 6ccf8cdd0fba4a754220d26e069db8b6ba2d0c58..3b005eea51807203f9d3586b936c07a4c703622f 100644 (file)
@@ -22,43 +22,95 @@ int main ()
   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;
 }      
This page took 0.047856 seconds and 5 git commands to generate.