From 91e205beb0c9869845140b9c6e1e6b69b2a5b426 Mon Sep 17 00:00:00 2001 From: Martin Cermak Date: Mon, 2 Jan 2017 10:26:16 +0100 Subject: [PATCH] PR20333/preadv --- tapset/linux/nd_syscalls2.stp | 38 ---------------- tapset/linux/sysc_preadv.stp | 82 +++++++++++++++++++++++++++++++++++ tapset/linux/syscalls2.stp | 42 ------------------ 3 files changed, 82 insertions(+), 80 deletions(-) create mode 100644 tapset/linux/sysc_preadv.stp diff --git a/tapset/linux/nd_syscalls2.stp b/tapset/linux/nd_syscalls2.stp index 637847abc..7359051d6 100644 --- a/tapset/linux/nd_syscalls2.stp +++ b/tapset/linux/nd_syscalls2.stp @@ -1,42 +1,4 @@ -# preadv ____________________________________________________ -# -# SYSCALL_DEFINE5(preadv, unsigned long, fd, -# const struct iovec __user *, vec, -# unsigned long, vlen, unsigned long, pos_l, -# unsigned long, pos_h) -# COMPAT_SYSCALL_DEFINE5(preadv, unsigned long, fd, -# const struct compat_iovec __user *,vec, -# unsigned long, vlen, u32, pos_low, u32, pos_high) -# -probe nd_syscall.preadv = __nd_syscall.preadv ?, __nd_syscall.compat_preadv ? -{ - name = "preadv" -} -probe __nd_syscall.preadv = kprobe.function("sys_preadv") -{ - asmlinkage() - fd = int_arg(1) - vector_uaddr = pointer_arg(2) - count = int_arg(3) - offset = (ulong_arg(5) << @const("BITS_PER_LONG")) + ulong_arg(4) - argstr = sprintf("%d, %p, %d, 0x%x", fd, vector_uaddr, count, offset) -} -probe __nd_syscall.compat_preadv = kprobe.function("compat_sys_preadv") -{ - fd = int_arg(1) - vector_uaddr = pointer_arg(2) - count = int_arg(3) - offset = (u32_arg(5) << 32) + u32_arg(4) - argstr = sprintf("%d, %p, %d, 0x%x", fd, vector_uaddr, count, offset) -} -probe nd_syscall.preadv.return = kprobe.function("sys_preadv").return ?, - kprobe.function("compat_sys_preadv").return ? -{ - name = "preadv" - retstr = returnstr(1) -} - # preadv2 __________________________________________________ # # SYSCALL_DEFINE6(preadv2, unsigned long, fd, const struct iovec __user *, vec, diff --git a/tapset/linux/sysc_preadv.stp b/tapset/linux/sysc_preadv.stp new file mode 100644 index 000000000..cb106b958 --- /dev/null +++ b/tapset/linux/sysc_preadv.stp @@ -0,0 +1,82 @@ +# preadv ____________________________________________________ +# +# SYSCALL_DEFINE5(preadv, unsigned long, fd, +# const struct iovec __user *, vec, +# unsigned long, vlen, unsigned long, pos_l, +# unsigned long, pos_h) +# COMPAT_SYSCALL_DEFINE5(preadv, unsigned long, fd, +# const struct compat_iovec __user *,vec, +# unsigned long, vlen, u32, pos_low, u32, pos_high) +# + +@define _SYSCALL_PREADV_NAME +%( + name = "preadv" +%) + +@define _SYSCALL_PREADV_ARGSTR +%( + argstr = sprintf("%d, %p, %d, 0x%x", fd, vector_uaddr, count, offset) +%) + +probe syscall.preadv = dw_syscall.preadv !, nd_syscall.preadv {} +probe syscall.preadv.return = dw_syscall.preadv.return !, nd_syscall.preadv.return {} + +# dw_preadv _____________________________________________________ + +probe dw_syscall.preadv = __syscall.preadv ?, __syscall.compat_preadv ? +{ + @_SYSCALL_PREADV_NAME +} +probe __syscall.preadv = kernel.function("sys_preadv") +{ + fd = __int32($fd) + vector_uaddr = $vec + count = __int32($vlen) + offset = ($pos_h << @const("BITS_PER_LONG")) + __ulong($pos_l) + @_SYSCALL_PREADV_ARGSTR +} +probe __syscall.compat_preadv = kernel.function("compat_sys_preadv") +{ + fd = __int32($fd) + vector_uaddr = $vec + count = __int32($vlen) + offset = ($pos_high << 32) + __uint32($pos_low) + @_SYSCALL_PREADV_ARGSTR +} +probe dw_syscall.preadv.return = kernel.function("sys_preadv").return ?, + kernel.function("compat_sys_preadv").return ? +{ + @_SYSCALL_PREADV_NAME + retstr = return_str(1, $return) +} + +# nd_preadv _____________________________________________________ + +probe nd_syscall.preadv = __nd_syscall.preadv ?, __nd_syscall.compat_preadv ? +{ + @_SYSCALL_PREADV_NAME +} +probe __nd_syscall.preadv = kprobe.function("sys_preadv") +{ + asmlinkage() + fd = int_arg(1) + vector_uaddr = pointer_arg(2) + count = int_arg(3) + offset = (ulong_arg(5) << @const("BITS_PER_LONG")) + ulong_arg(4) + @_SYSCALL_PREADV_ARGSTR +} +probe __nd_syscall.compat_preadv = kprobe.function("compat_sys_preadv") +{ + fd = int_arg(1) + vector_uaddr = pointer_arg(2) + count = int_arg(3) + offset = (u32_arg(5) << 32) + u32_arg(4) + @_SYSCALL_PREADV_ARGSTR +} +probe nd_syscall.preadv.return = kprobe.function("sys_preadv").return ?, + kprobe.function("compat_sys_preadv").return ? +{ + @_SYSCALL_PREADV_NAME + retstr = returnstr(1) +} diff --git a/tapset/linux/syscalls2.stp b/tapset/linux/syscalls2.stp index c6898ceb8..18f66ae1a 100644 --- a/tapset/linux/syscalls2.stp +++ b/tapset/linux/syscalls2.stp @@ -1,46 +1,4 @@ -# preadv ____________________________________________________ -# -# SYSCALL_DEFINE5(preadv, unsigned long, fd, -# const struct iovec __user *, vec, -# unsigned long, vlen, unsigned long, pos_l, -# unsigned long, pos_h) -# COMPAT_SYSCALL_DEFINE5(preadv, unsigned long, fd, -# const struct compat_iovec __user *,vec, -# unsigned long, vlen, u32, pos_low, u32, pos_high) -# -probe syscall.preadv = __syscall.preadv ?, __syscall.compat_preadv ? -{ - name = "preadv" -} -probe __syscall.preadv = kernel.function("sys_preadv") -{ - fd = __int32($fd) - vector_uaddr = $vec - count = __int32($vlen) - offset = ($pos_h << @const("BITS_PER_LONG")) + __ulong($pos_l) - argstr = sprintf("%d, %p, %d, 0x%x", __int32($fd), $vec, - __int32($vlen), - (($pos_h << @const("BITS_PER_LONG")) - + __ulong($pos_l))) -} -probe __syscall.compat_preadv = kernel.function("compat_sys_preadv") -{ - fd = __int32($fd) - vector_uaddr = $vec - count = __int32($vlen) - offset = ($pos_high << 32) + __uint32($pos_low) - argstr = sprintf("%d, %p, %d, 0x%x", __int32($fd), $vec, - __int32($vlen), - (($pos_high << 32) + __uint32($pos_low))) -} -probe syscall.preadv.return = kernel.function("sys_preadv").return ?, - kernel.function("compat_sys_preadv").return ? -{ - name = "preadv" - retstr = return_str(1, $return) -} - # preadv2 __________________________________________________ # # SYSCALL_DEFINE6(preadv2, unsigned long, fd, const struct iovec __user *, vec, -- 2.43.5