# rt_sigpending ______________________________________________
#
# long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
+# COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset,
+# compat_size_t, sigsetsize)
+# asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set,
+# compat_size_t sigsetsize)
#
-probe nd_syscall.rt_sigpending = kprobe.function("sys_rt_sigpending") ?
+probe nd_syscall.rt_sigpending = __nd_syscall.rt_sigpending ?,
+ __nd_syscall.compat_rt_sigpending ?
{
name = "rt_sigpending"
// set_uaddr = $set
sigsetsize = ulong_arg(2)
argstr = sprintf("%p, %d", set_uaddr, sigsetsize)
}
-probe nd_syscall.rt_sigpending.return = kprobe.function("sys_rt_sigpending").return ?
+probe __nd_syscall.rt_sigpending = kprobe.function("sys_rt_sigpending") ?
+{
+ @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __nd_syscall.compat_rt_sigpending =
+ kprobe.function("compat_sys_rt_sigpending") !,
+ kprobe.function("sys32_rt_sigpending") ?
+{
+}
+probe nd_syscall.rt_sigpending.return =
+ __nd_syscall.rt_sigpending.return ?,
+ __nd_syscall.compat_rt_sigpending.return ?
{
name = "rt_sigpending"
retstr = returnstr(1)
}
+probe __nd_syscall.rt_sigpending.return =
+ kprobe.function("sys_rt_sigpending").return ?
+{
+ @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __nd_syscall.compat_rt_sigpending.return =
+ kprobe.function("compat_sys_rt_sigpending").return !,
+ kprobe.function("sys32_rt_sigpending").return ?
+{
+}
# rt_sigprocmask _____________________________________________
# long sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset,
# rt_sigpending ______________________________________________
#
# long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
+# COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset,
+# compat_size_t, sigsetsize)
+# asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set,
+# compat_size_t sigsetsize)
#
-probe syscall.rt_sigpending = kernel.function("sys_rt_sigpending").call ?
+probe syscall.rt_sigpending = __syscall.rt_sigpending ?,
+ __syscall.compat_rt_sigpending ?
{
name = "rt_sigpending"
set_uaddr = @choose_defined($uset, $set)
sigsetsize = $sigsetsize
argstr = sprintf("%p, %d", set_uaddr, $sigsetsize)
}
-probe syscall.rt_sigpending.return = kernel.function("sys_rt_sigpending").return ?
+probe __syscall.rt_sigpending = kernel.function("sys_rt_sigpending").call ?
+{
+ @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __syscall.compat_rt_sigpending =
+ kernel.function("compat_sys_rt_sigpending").call !,
+ kernel.function("sys32_rt_sigpending").call ?
+{
+}
+probe syscall.rt_sigpending.return = __syscall.rt_sigpending.return ?,
+ __syscall.compat_rt_sigpending.return ?
{
name = "rt_sigpending"
retstr = return_str(1, $return)
}
+probe __syscall.rt_sigpending.return =
+ kernel.function("sys_rt_sigpending").return ?
+{
+ @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __syscall.compat_rt_sigpending.return =
+ kernel.function("compat_sys_rt_sigpending").return !,
+ kernel.function("sys32_rt_sigpending").return ?
+{
+}
# rt_sigprocmask _____________________________________________
# long sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset,
-/* COVERAGE: rt_sigprocmask rt_sigaction */
+/* COVERAGE: rt_sigprocmask rt_sigaction rt_sigpending */
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
//staptest// rt_sigaction (SIGUSR1, {XXXX, [^,]+, XXXX, \[SIGALRM\]}, 0x[0]+, 8) = 0
#endif
+ sigpending(&mask);
+ //staptest// rt_sigpending (XXXX, 8) = 0
+
+ sigpending((sigset_t *) 0);
+ //staptest// rt_sigpending (0x0, 8) = -NNNN (EFAULT)
+
return 0;
}