From 80d356de28477ee37fa5d533df9d1eeb76ce108a Mon Sep 17 00:00:00 2001 From: David Smith Date: Mon, 23 Dec 2013 10:16:19 -0600 Subject: [PATCH] PR16207 partial fix: Fix the 'signalfd' [nd_]syscall.exp tests on rawhide. * tapset/linux/syscalls2.stp: Fix syscall nesting in 'syscall.signalfd' and 'syscall.compat_signalfd'. * tapset/linux/nd_syscalls2.stp: Ditto. --- tapset/linux/nd_syscalls2.stp | 17 +++++++++------ tapset/linux/syscalls2.stp | 40 +++++++++++++++++++++++++---------- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/tapset/linux/nd_syscalls2.stp b/tapset/linux/nd_syscalls2.stp index 87f966062..788e9a58f 100644 --- a/tapset/linux/nd_syscalls2.stp +++ b/tapset/linux/nd_syscalls2.stp @@ -3181,6 +3181,7 @@ probe nd_syscall.signalfd = __nd_syscall.signalfd4 !, } probe __nd_syscall.signalfd4 = kprobe.function("sys_signalfd4") { + @__syscall_gate(%{ __NR_signalfd4 %}) asmlinkage() flags = int_arg(4) if (flags == 0) { @@ -3198,6 +3199,7 @@ probe __nd_syscall.signalfd4 = kprobe.function("sys_signalfd4") } probe __nd_syscall.signalfd = kprobe.function("sys_signalfd") { + @__syscall_gate(%{ __NR_signalfd %}) name = "signalfd" asmlinkage() flags = 0 @@ -3208,18 +3210,19 @@ probe __nd_syscall.signalfd = kprobe.function("sys_signalfd") probe nd_syscall.signalfd.return = __nd_syscall.signalfd4.return !, __nd_syscall.signalfd.return ? { + retstr = returnstr(1) } probe __nd_syscall.signalfd4.return = kprobe.function("sys_signalfd4").return { + @__syscall_gate(%{ __NR_signalfd4 %}) flags = @entry(__asmlinkage_int_arg(4)) name = (flags == 0) ? "signalfd" : "signalfd4" - retstr = returnstr(1) } probe __nd_syscall.signalfd.return = kprobe.function("sys_signalfd").return { + @__syscall_gate(%{ __NR_signalfd %}) flags = 0 name = "signalfd" - retstr = returnstr(1) } probe nd_syscall.compat_signalfd = __nd_syscall.compat_signalfd4 !, __nd_syscall.compat_signalfd ? @@ -3230,12 +3233,12 @@ probe __nd_syscall.compat_signalfd4 = kprobe.function("compat_sys_signalfd4") asmlinkage() flags = int_arg(4) if (flags == 0) { - name = "compat_signalfd" + name = "signalfd" // argstr = sprintf("%d, %p, %d", $ufd, $sigmask, $sigsetsize) argstr = sprintf("%d, %p, %d", int_arg(1), pointer_arg(2), u32_arg(3)) } else { - name = "compat_signalfd4" + name = "signalfd4" // argstr = sprintf("%d, %p, %d, %s", $ufd, $sigmask, // $sigsetsize, _signalfd4_flags_str($flags)) argstr = sprintf("%d, %p, %d, %s", int_arg(1), @@ -3247,7 +3250,7 @@ probe __nd_syscall.compat_signalfd = kprobe.function("compat_sys_signalfd") { asmlinkage() flags = 0 - name = "compat_signalfd" + name = "signalfd" // argstr = sprintf("%d, %p, %d", $ufd, $sigmask, $sigsetsize) argstr = sprintf("%d, %p, %d", int_arg(1), pointer_arg(2), u32_arg(3)) @@ -3261,14 +3264,14 @@ probe __nd_syscall.compat_signalfd4.return = kprobe.function("compat_sys_signalfd4").return { flags = @entry(__asmlinkage_int_arg(4)) - name = (flags == 0) ? "compat_signalfd" : "compat_signalfd4" + name = (flags == 0) ? "signalfd" : "signalfd4" retstr = returnstr(1) } probe __nd_syscall.compat_signalfd.return = kprobe.function("compat_sys_signalfd").return { flags = 0 - name = "compat_signalfd" + name = "signalfd" retstr = returnstr(1) } diff --git a/tapset/linux/syscalls2.stp b/tapset/linux/syscalls2.stp index 3f9a5278c..fe66edb66 100644 --- a/tapset/linux/syscalls2.stp +++ b/tapset/linux/syscalls2.stp @@ -2653,8 +2653,7 @@ probe syscall.signal.return = kernel.function("sys_signal").return ? # long compat_sys_signalfd4(int ufd, const compat_sigset_t __user *sigmask, # compat_size_t sigsetsize, int flags) # -probe syscall.signalfd = kernel.function("sys_signalfd4").call !, - kernel.function("sys_signalfd").call ? +probe syscall.signalfd = __syscall.signalfd4 !, __syscall.signalfd ? { flags = @choose_defined($flags, 0); if (flags == 0) { @@ -2666,23 +2665,42 @@ probe syscall.signalfd = kernel.function("sys_signalfd4").call !, $sizemask, _signalfd4_flags_str($flags)) } } -probe syscall.signalfd.return = kernel.function("sys_signalfd4").return !, - kernel.function("sys_signalfd").return ? +probe __syscall.signalfd4 = kernel.function("sys_signalfd4").call +{ + @__syscall_gate(%{ __NR_signalfd4 %}) +} +probe __syscall.signalfd = kernel.function("sys_signalfd").call +{ + @__syscall_gate(%{ __NR_signalfd %}) +} +probe syscall.signalfd.return = __syscall.signalfd4.return !, + __syscall.signalfd.return ? { - flags = @choose_defined($flags, 0); - name = (flags == 0) ? "signalfd" : "signalfd4" retstr = return_str(1, $return) } +probe __syscall.signalfd4.return = kernel.function("sys_signalfd4").return +{ + @__syscall_gate(%{ __NR_signalfd4 %}) + flags = $flags + name = (flags == 0) ? "signalfd" : "signalfd4" +} +probe __syscall.signalfd.return = kernel.function("sys_signalfd").return +{ + @__syscall_gate(%{ __NR_signalfd %}) + flags = 0 + name = "signalfd" +} probe syscall.compat_signalfd = kernel.function("compat_sys_signalfd4").call !, kernel.function("compat_sys_signalfd").call ? { flags = @choose_defined($flags, 0); if (flags == 0) { - name = "compat_signalfd" - argstr = sprintf("%d, %p, %d", $ufd, $sigmask, $sigsetsize) + name = "signalfd" + argstr = sprintf("%d, %p, %d", __int32($ufd), $sigmask, + $sigsetsize) } else { - name = "compat_signalfd4" - argstr = sprintf("%d, %p, %d, %s", $ufd, $sigmask, + name = "signalfd4" + argstr = sprintf("%d, %p, %d, %s", __int32($ufd), $sigmask, $sigsetsize, _signalfd4_flags_str($flags)) } } @@ -2691,7 +2709,7 @@ probe syscall.compat_signalfd.return = kernel.function("compat_sys_signalfd").return ? { flags = @choose_defined($flags, 0); - name = (flags == 0) ? "compat_signalfd" : "compat_signalfd4" + name = (flags == 0) ? "signalfd" : "signalfd4" retstr = return_str(1, $return) } -- 2.43.5