]> sourceware.org Git - systemtap.git/commitdiff
PR18395: New tapset handling {get,set}_robust_list syscalls.
authorMartin Cermak <mcermak@redhat.com>
Tue, 12 May 2015 05:23:49 +0000 (07:23 +0200)
committerMartin Cermak <mcermak@redhat.com>
Tue, 12 May 2015 05:23:49 +0000 (07:23 +0200)
* tapset/linux/nd_syscalls.stp: New probe nd_syscall.get_robust_list
* tapset/linux/nd_syscalls2.stp: New probe nd_syscall.set_robust_list
* tapset/linux/syscalls.stp: New probe syscall.get_robust_list
* tapset/linux/syscalls2.stp: New probe syscall.set_robust_list
* testsuite/buildok/nd_syscalls-detailed.stp: New subtest
* testsuite/buildok/nd_syscalls2-detailed.stp: Ditto
* testsuite/buildok/syscalls-detailed.stp: Ditto
* testsuite/buildok/syscalls2-detailed.stp: Ditto
* testsuite/systemtap.syscall/robust_list.c: New testcase

tapset/linux/nd_syscalls.stp
tapset/linux/nd_syscalls2.stp
tapset/linux/syscalls.stp
tapset/linux/syscalls2.stp
testsuite/buildok/nd_syscalls-detailed.stp
testsuite/buildok/nd_syscalls2-detailed.stp
testsuite/buildok/syscalls-detailed.stp
testsuite/buildok/syscalls2-detailed.stp
testsuite/systemtap.syscall/robust_list.c [new file with mode: 0644]

index c7ad4647ed9131cb543160fd1d840c8c1f5ea947..1a5e48691a758f6b9558ba9e85fbe64896ff0bfd 100644 (file)
@@ -2469,6 +2469,39 @@ probe __nd_syscall.getrlimit.return = kprobe.function("sys_getrlimit").return
        @__syscall_gate_compat_simple
 }
 
+# get_robust_list ____________________________________________
+# SYSCALL_DEFINE3(get_robust_list, int, pid,
+#                 struct robust_list_head __user * __user *, head_ptr,
+#                 size_t __user *, len_ptr)
+# COMPAT_SYSCALL_DEFINE3(get_robust_list, int, pid,
+#                        compat_uptr_t __user *, head_ptr,
+#                        compat_size_t __user *, len_ptr)
+probe nd_syscall.get_robust_list = __nd_syscall.get_robust_list ?,
+                                   kprobe.function("compat_sys_get_robust_list") ?
+{
+       name = "get_robust_list"
+       asmlinkage()
+       pid = int_arg(1)
+       list_head_uaddr = pointer_arg(2)
+       len_uaddr = pointer_arg(3)
+       argstr = sprintf("%d, %p, %p", pid, list_head_uaddr, len_uaddr)
+
+}
+probe __nd_syscall.get_robust_list = kprobe.function("sys_get_robust_list")
+{
+       @__syscall_gate_compat_simple
+}
+probe nd_syscall.get_robust_list.return = __nd_syscall.get_robust_list.return ?,
+                                          kprobe.function("compat_sys_get_robust_list").return ?
+{
+       name = "get_robust_list"
+       retstr = returnstr(1)
+}
+probe __nd_syscall.get_robust_list.return = kprobe.function("sys_get_robust_list").return
+{
+       @__syscall_gate_compat_simple
+}
+
 # getrusage __________________________________________________
 # long sys_getrusage(int who, struct rusage __user *ru)
 # COMPAT_SYSCALL_DEFINE2(getrusage, int, who, struct compat_rusage __user *,
index 71e90f59ffc9938af1a980a2298bdc54d091a809..adc8ba5e746a67d7fe733da4ba8b6d55fe92be53 100644 (file)
@@ -3177,6 +3177,39 @@ probe __nd_syscall.setrlimit.return = kprobe.function("sys_setrlimit").return
        @__syscall_gate(%{ __NR_setrlimit %})
 }
 
+# set_robust_list ____________________________________________
+# SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
+#                 size_t, len)
+# COMPAT_SYSCALL_DEFINE2(set_robust_list,
+#                        struct compat_robust_list_head __user *, head,
+#                        compat_size_t, len)
+probe nd_syscall.set_robust_list =
+               __nd_syscall.set_robust_list ?,
+               kprobe.function("compat_sys_set_robust_list") ?
+{
+       name = "set_robust_list"
+       asmlinkage()
+       list_head_uaddr = pointer_arg(1)
+       len = ulong_arg(2)
+       argstr = sprintf("%p, %u", list_head_uaddr, len)
+}
+probe __nd_syscall.set_robust_list = kprobe.function("sys_set_robust_list")
+{
+       @__syscall_gate_compat_simple
+}
+probe nd_syscall.set_robust_list.return =
+               __nd_syscall.set_robust_list.return ?,
+               kprobe.function("compat_sys_set_robust_list").return ?
+{
+       name = "set_robust_list"
+       retstr = returnstr(1)
+}
+probe __nd_syscall.set_robust_list.return =
+               kprobe.function("sys_set_robust_list").return
+{
+       @__syscall_gate_compat_simple
+}
+
 # setsid _____________________________________________________
 #
 # long sys_setsid(void)
index 712a17e7c3263b0ea1bc750be82142fb6164079c..1c48f67283a6d7743954f4df6dab5c321888d560 100644 (file)
@@ -2302,6 +2302,38 @@ probe __syscall.getrlimit.return = kernel.function("sys_getrlimit").return
        @__syscall_gate_compat_simple
 }
 
+# get_robust_list ____________________________________________
+# SYSCALL_DEFINE3(get_robust_list, int, pid,
+#                 struct robust_list_head __user * __user *, head_ptr,
+#                 size_t __user *, len_ptr)
+# COMPAT_SYSCALL_DEFINE3(get_robust_list, int, pid,
+#                        compat_uptr_t __user *, head_ptr,
+#                        compat_size_t __user *, len_ptr)
+probe syscall.get_robust_list = __syscall.get_robust_list ?,
+                                kernel.function("compat_sys_get_robust_list") ?
+{
+       name = "get_robust_list"
+       pid = __int32($pid)
+       list_head_uaddr = @__pointer($head_ptr)
+       len_uaddr = @__pointer($len_ptr)
+       argstr = sprintf("%d, %p, %p", pid, list_head_uaddr, len_uaddr)
+}
+probe __syscall.get_robust_list = kernel.function("sys_get_robust_list")
+{
+       @__syscall_gate_compat_simple
+}
+probe syscall.get_robust_list.return = __syscall.get_robust_list.return ?,
+               kernel.function("compat_sys_get_robust_list").return ?
+{
+       name = "get_robust_list"
+       retstr = return_str(1, $return)
+}
+probe __syscall.get_robust_list.return =
+               kernel.function("sys_get_robust_list").return
+{
+       @__syscall_gate_compat_simple
+}
+
 # getrusage __________________________________________________
 # long sys_getrusage(int who, struct rusage __user *ru)
 # COMPAT_SYSCALL_DEFINE2(getrusage, int, who, struct compat_rusage __user *,
index 1f0f99f78c3763a6c4f2fd8d4c9e96cb3959bc97..fa9135a5f6e600c94868673501b3ffac11b27475 100644 (file)
@@ -3059,6 +3059,41 @@ probe __syscall.setrlimit.return = kernel.function("sys_setrlimit").return
        @__syscall_gate(%{ __NR_setrlimit %})
 }
 
+# set_robust_list ____________________________________________
+# SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
+#                 size_t, len)
+# COMPAT_SYSCALL_DEFINE2(set_robust_list,
+#                        struct compat_robust_list_head __user *, head,
+#                        compat_size_t, len)
+probe syscall.set_robust_list = __syscall.set_robust_list ?,
+                                __syscall.compat_set_robust_list ?
+{
+       name = "set_robust_list"
+       list_head_uaddr = @__pointer($head)
+       argstr = sprintf("%p, %u", list_head_uaddr, len)
+}
+probe __syscall.set_robust_list = kernel.function("sys_set_robust_list")
+{
+       @__syscall_gate_compat_simple
+       len = __ulong($len)
+}
+probe __syscall.compat_set_robust_list =
+               kernel.function("compat_sys_set_robust_list")
+{
+       len = __uint32($len)
+}
+probe syscall.set_robust_list.return = __syscall.set_robust_list.return ?,
+               kernel.function("compat_sys_set_robust_list").return ?
+{
+       name = "set_robust_list"
+       retstr = return_str(1, $return)
+}
+probe __syscall.set_robust_list.return =
+               kernel.function("sys_set_robust_list").return
+{
+       @__syscall_gate_compat_simple
+}
+
 # setsid _____________________________________________________
 #
 # long sys_setsid(void)
index 487d83c21c5e539e6561bbed8330a8577c59d073..0b1c334e76479a30c5dad4bdf7592905ad4ac06d 100755 (executable)
@@ -833,6 +833,16 @@ probe nd_syscall.getrlimit.return
        printf("%s, %s\n", name, retstr)
 }
 
+probe nd_syscall.get_robust_list
+{
+       printf("%s, %s\n", name, argstr)
+       printf("%d, %p, %p", pid, list_head_uaddr, len_uaddr)
+}
+probe nd_syscall.get_robust_list.return
+{
+       printf("%s, %s\n", name, retstr)
+}
+
 probe nd_syscall.getrusage
 {
        printf("%s, %s\n", name, argstr)
index 3f94ea8cdb3067778f80ba3e39cf5aa3bd719ffb..4342dcd345daa1c0ae7f082b22169dc001a2fb5b 100755 (executable)
@@ -867,6 +867,16 @@ probe nd_syscall.setrlimit.return
        printf("%s %s\n", name, retstr)
 }
 
+probe nd_syscall.set_robust_list
+{
+       printf("%s(%s)\n", name, argstr)
+       printf("%p, %u", list_head_uaddr, len)
+}
+probe nd_syscall.set_robust_list.return
+{
+       printf("%s %s\n", name, retstr)
+}
+
 probe nd_syscall.setsid
 {
        printf("%s(%s)\n", name, argstr)
index d1da25b6c5a0c4f6c35960199e43557cc860a3c7..28e8b6823ae23b8eae62234d3b1a28194f1b93e4 100755 (executable)
@@ -831,6 +831,16 @@ probe syscall.getrlimit.return
        printf("%s, %s\n", name, retstr)
 }
 
+probe syscall.get_robust_list
+{
+       printf("%s, %s\n", name, argstr)
+       printf("%d, %p, %p", pid, list_head_uaddr, len_uaddr)
+}
+probe syscall.get_robust_list.return
+{
+       printf("%s, %s\n", name, retstr)
+}
+
 probe syscall.getrusage
 {
        printf("%s, %s\n", name, argstr)
index db70836574acabc5810ff2f6f97f7010d9a8d074..4224b966bd88207a1ae27e954bf034b73d166e72 100755 (executable)
@@ -863,6 +863,16 @@ probe syscall.setrlimit.return
        printf("%s %s\n", name, retstr)
 }
 
+probe syscall.set_robust_list
+{
+       printf("%s(%s)\n", name, argstr)
+       printf("%p, %u", list_head_uaddr, len)
+}
+probe syscall.set_robust_list.return
+{
+       printf("%s %s\n", name, retstr)
+}
+
 probe syscall.setsid
 {
        printf("%s(%s)\n", name, argstr)
diff --git a/testsuite/systemtap.syscall/robust_list.c b/testsuite/systemtap.syscall/robust_list.c
new file mode 100644 (file)
index 0000000..2ae6ce5
--- /dev/null
@@ -0,0 +1,66 @@
+/* COVERAGE: get_robust_list set_robust_list */
+
+#define _GNU_SOURCE
+#include <linux/futex.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+static inline long
+__get_robust_list(int pid, struct robust_list_head **lhp, size_t *len)
+{
+    return syscall(__NR_get_robust_list, pid, lhp, len);
+}
+
+static inline long
+__set_robust_list(struct robust_list_head *lhp, size_t len)
+{
+    return syscall(__NR_set_robust_list, lhp, len);
+}
+
+int main()
+{
+    int pid;
+    struct robust_list_head *lhp;
+    size_t len;
+
+    __get_robust_list(getpid(), &lhp, &len);
+    //staptest// get_robust_list (NNNN, XXXX, XXXX) = 0
+
+    __set_robust_list(lhp, len);
+    //staptest// set_robust_list (XXXX, NNNN) = 0
+
+    // Limit testing
+
+    __get_robust_list(-1, &lhp, &len);
+    //staptest// get_robust_list (-1, XXXX, XXXX) = -NNNN
+
+    __get_robust_list(0, (struct robust_list_head **)-1, &len);
+#ifdef __s390__
+    //staptest// get_robust_list (0, 0x[7]?[f]+, XXXX) = -NNNN
+#else
+    //staptest// get_robust_list (0, 0x[f]+, XXXX) = -NNNN
+#endif
+
+    __get_robust_list(0, &lhp, (size_t *)-1);
+#ifdef __s390__
+    //staptest// get_robust_list (0, XXXX, 0x[7]?[f]+) = -NNNN
+#else
+    //staptest// get_robust_list (0, XXXX, 0x[f]+) = -NNNN
+#endif
+
+    __set_robust_list((struct robust_list_head *)-1, 0);
+#ifdef __s390__
+    //staptest// set_robust_list (0x[7]?[f]+, 0) = -NNNN
+#else
+    //staptest// set_robust_list (0x[f]+, 0) = -NNNN
+#endif
+
+    __set_robust_list(0, -1);
+#if __WORDSIZE == 64
+    //staptest// set_robust_list (0x0, 18446744073709551615) = -NNNN
+#else
+    //staptest// set_robust_list (0x0, 4294967295) = -NNNN
+#endif
+
+    return 0;
+}
This page took 0.047672 seconds and 5 git commands to generate.