From 7af7ea8defa68498f6ffd10221b215655c9e2d10 Mon Sep 17 00:00:00 2001 From: Martin Cermak Date: Thu, 22 Dec 2016 17:37:37 +0100 Subject: [PATCH] PR20333/fchownat --- tapset/linux/nd_syscalls.stp | 28 -------------- tapset/linux/sysc_fchownat.stp | 67 ++++++++++++++++++++++++++++++++++ tapset/linux/syscalls.stp | 28 -------------- 3 files changed, 67 insertions(+), 56 deletions(-) create mode 100644 tapset/linux/sysc_fchownat.stp diff --git a/tapset/linux/nd_syscalls.stp b/tapset/linux/nd_syscalls.stp index e189febef..ce975b642 100644 --- a/tapset/linux/nd_syscalls.stp +++ b/tapset/linux/nd_syscalls.stp @@ -1,32 +1,4 @@ -# fchownat ___________________________________________________ -# new function with 2.6.16 -# long sys_fchownat(int dfd, const char __user *filename, -# uid_t user, gid_t group, int flag) -probe nd_syscall.fchownat = kprobe.function("sys_fchownat") ? -{ - @__syscall_compat_gate(@const("__NR_fchownat"), - @const("__NR_compat_fchownat")) - name = "fchownat" - asmlinkage() - dirfd = int_arg(1) - dirfd_str = _dfd_str(dirfd) - pathname = user_string_quoted(pointer_arg(2)) - owner = __int32(uint_arg(3)) - group = __int32(uint_arg(4)) - flags = int_arg(5) - flags_str = _at_flag_str(flags) - argstr = sprintf("%s, %s, %d, %d, %s", - dirfd_str, user_string_quoted(pointer_arg(2)), owner, group, flags_str) -} -probe nd_syscall.fchownat.return = kprobe.function("sys_fchownat").return ? -{ - @__syscall_compat_gate(@const("__NR_fchownat"), - @const("__NR_compat_fchownat")) - name = "fchownat" - retstr = returnstr(1) -} - # fcntl ______________________________________________________ # long sys_fcntl(int fd, unsigned int cmd, unsigned long arg) # long sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) diff --git a/tapset/linux/sysc_fchownat.stp b/tapset/linux/sysc_fchownat.stp new file mode 100644 index 000000000..12b63e7c8 --- /dev/null +++ b/tapset/linux/sysc_fchownat.stp @@ -0,0 +1,67 @@ +# fchownat ___________________________________________________ +# new function with 2.6.16 +# long sys_fchownat(int dfd, const char __user *filename, +# uid_t user, gid_t group, int flag) + +@define _SYSCALL_FCHOWNAT_NAME +%( + name = "fchownat" +%) + +@define _SYSCALL_FCHOWNAT_ARGSTR +%( + argstr = sprintf("%s, %s, %d, %d, %s", dirfd_str, pathname, owner, + group, flags_str) +%) + +probe syscall.fchownat = dw_syscall.fchownat !, nd_syscall.fchownat {} +probe syscall.fchownat.return = dw_syscall.fchownat.return !, nd_syscall.fchownat.return {} + +# dw_fchownat _____________________________________________________ + +probe dw_syscall.fchownat = kernel.function("sys_fchownat").call ? +{ + @__syscall_compat_gate(@const("__NR_fchownat"), + @const("__NR_compat_fchownat")) + @_SYSCALL_FCHOWNAT_NAME + dirfd = __int32($dfd) + dirfd_str = _dfd_str(__int32($dfd)) + pathname = user_string_quoted($filename) + owner = __int32($user) + group = __int32($group) + flags = __int32($flag) + flags_str = _at_flag_str(__int32($flag)) + @_SYSCALL_FCHOWNAT_ARGSTR +} +probe dw_syscall.fchownat.return = kernel.function("sys_fchownat").return ? +{ + @__syscall_compat_gate(@const("__NR_fchownat"), + @const("__NR_compat_fchownat")) + @_SYSCALL_FCHOWNAT_NAME + retstr = return_str(1, $return) +} + +# nd_fchownat _____________________________________________________ + +probe nd_syscall.fchownat = kprobe.function("sys_fchownat") ? +{ + @__syscall_compat_gate(@const("__NR_fchownat"), + @const("__NR_compat_fchownat")) + @_SYSCALL_FCHOWNAT_NAME + asmlinkage() + dirfd = int_arg(1) + dirfd_str = _dfd_str(dirfd) + pathname = user_string_quoted(pointer_arg(2)) + owner = __int32(uint_arg(3)) + group = __int32(uint_arg(4)) + flags = int_arg(5) + flags_str = _at_flag_str(flags) + @_SYSCALL_FCHOWNAT_ARGSTR +} +probe nd_syscall.fchownat.return = kprobe.function("sys_fchownat").return ? +{ + @__syscall_compat_gate(@const("__NR_fchownat"), + @const("__NR_compat_fchownat")) + @_SYSCALL_FCHOWNAT_NAME + retstr = returnstr(1) +} diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index dae3ac183..40d16f71b 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -1,32 +1,4 @@ -# fchownat ___________________________________________________ -# new function with 2.6.16 -# long sys_fchownat(int dfd, const char __user *filename, -# uid_t user, gid_t group, int flag) -probe syscall.fchownat = kernel.function("sys_fchownat").call ? -{ - @__syscall_compat_gate(@const("__NR_fchownat"), - @const("__NR_compat_fchownat")) - name = "fchownat" - dirfd = __int32($dfd) - dirfd_str = _dfd_str(__int32($dfd)) - pathname = user_string_quoted($filename) - owner = __int32($user) - group = __int32($group) - flags = __int32($flag) - flags_str = _at_flag_str(__int32($flag)) - argstr = sprintf("%s, %s, %d, %d, %s", dirfd_str, - user_string_quoted($filename), owner, group, - flags_str) -} -probe syscall.fchownat.return = kernel.function("sys_fchownat").return ? -{ - @__syscall_compat_gate(@const("__NR_fchownat"), - @const("__NR_compat_fchownat")) - name = "fchownat" - retstr = return_str(1, $return) -} - # fcntl ______________________________________________________ # long sys_fcntl(int fd, unsigned int cmd, unsigned long arg) # long sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) -- 2.43.5