From 288768ebe8bb7c258ff0f50950c3aeb70e8974ae Mon Sep 17 00:00:00 2001 From: David Smith Date: Thu, 19 Dec 2013 13:57:37 -0600 Subject: [PATCH] PR16207 partial fix: Fix the 'trunc' [nd_]syscall.exp tests on rawhide. * tapset/linux/syscalls.stp: Add 'compat_sys_ftruncate" support to syscall.ftruncate probe. * tapset/linux/nd_syscalls.stp: Ditto. * tapset/linux/syscalls2.stp: Add 'compat_sys_truncate" support to syscall.truncate probe. * tapset/linux/nd_syscalls2.stp: Ditto. --- tapset/linux/nd_syscalls.stp | 21 ++++++++++++++++++--- tapset/linux/nd_syscalls2.stp | 17 ++++++++++++++--- tapset/linux/syscalls.stp | 9 +++++++-- tapset/linux/syscalls2.stp | 8 ++++++-- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/tapset/linux/nd_syscalls.stp b/tapset/linux/nd_syscalls.stp index f370d0cff..c5176cada 100644 --- a/tapset/linux/nd_syscalls.stp +++ b/tapset/linux/nd_syscalls.stp @@ -1639,17 +1639,32 @@ probe nd_syscall.fsync.return = kprobe.function("sys_fsync").return ? } # ftruncate __________________________________________________ # long sys_ftruncate(unsigned int fd, unsigned long length) -probe nd_syscall.ftruncate = kprobe.function("sys_ftruncate") ? +# COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) +# +probe nd_syscall.ftruncate = __nd_syscall.ftruncate, + __nd_syscall.compat_ftruncate ? { name = "ftruncate" // fd = $fd // length = $length asmlinkage() fd = int_arg(1) - length = ulong_arg(2) argstr = sprintf("%d, %d", fd, length) } -probe nd_syscall.ftruncate.return = kprobe.function("sys_ftruncate").return ? +probe __nd_syscall.ftruncate = kprobe.function("sys_ftruncate").call +{ + asmlinkage() + length = ulong_arg(2) +} +probe __nd_syscall.compat_ftruncate = + kprobe.function("compat_sys_ftruncate").call +{ + asmlinkage() + length = uint_arg(2) +} +probe nd_syscall.ftruncate.return = + kprobe.function("sys_ftruncate").return, + kprobe.function("compat_sys_ftruncate").return ? { name = "ftruncate" retstr = returnstr(1) diff --git a/tapset/linux/nd_syscalls2.stp b/tapset/linux/nd_syscalls2.stp index e9ed66831..87f966062 100644 --- a/tapset/linux/nd_syscalls2.stp +++ b/tapset/linux/nd_syscalls2.stp @@ -4076,8 +4076,12 @@ probe nd_syscall.tkill.return = kprobe.function("sys_tkill").return ? # # sys_truncate(const char __user * path, unsigned long length) # sys_truncate64(const char __user * path, loff_t length) +# COMPAT_SYSCALL_DEFINE2(truncate, const char __user *, path, +# compat_off_t, length) # -probe nd_syscall.truncate = __nd_syscall.truncate?, __nd_syscall.truncate64? +probe nd_syscall.truncate = __nd_syscall.truncate ?, + __nd_syscall.truncate64 ?, + __nd_syscall.compat_truncate ? { name = "truncate" // path_uaddr = $path @@ -4099,8 +4103,15 @@ probe __nd_syscall.truncate64 = kprobe.function("sys_truncate64") asmlinkage() length = longlong_arg(2) } -probe nd_syscall.truncate.return = kprobe.function("sys_truncate").return ?, - kprobe.function("sys_truncate64").return ? +probe __nd_syscall.compat_truncate = kprobe.function("compat_sys_truncate") +{ + asmlinkage() + length = int_arg(2) +} +probe nd_syscall.truncate.return = + kprobe.function("sys_truncate").return ?, + kprobe.function("sys_truncate64").return ?, + kprobe.function("compat_sys_truncate").return ? { name = "truncate" retstr = returnstr(1) diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index 38d3ee72d..7ec24ef80 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -1303,14 +1303,19 @@ probe syscall.fsync.return = kernel.function("sys_fsync").return } # ftruncate __________________________________________________ # long sys_ftruncate(unsigned int fd, unsigned long length) -probe syscall.ftruncate = kernel.function("sys_ftruncate").call +# COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) +# +probe syscall.ftruncate = kernel.function("sys_ftruncate").call, + kernel.function("compat_sys_ftruncate").call ? { name = "ftruncate" fd = $fd length = $length argstr = sprintf("%d, %d", fd, length) } -probe syscall.ftruncate.return = kernel.function("sys_ftruncate").return +probe syscall.ftruncate.return = + kernel.function("sys_ftruncate").return, + kernel.function("compat_sys_ftruncate").return ? { name = "ftruncate" retstr = return_str(1, $return) diff --git a/tapset/linux/syscalls2.stp b/tapset/linux/syscalls2.stp index 72a090909..3f9a5278c 100644 --- a/tapset/linux/syscalls2.stp +++ b/tapset/linux/syscalls2.stp @@ -3367,9 +3367,12 @@ probe syscall.tkill.return = kernel.function("sys_tkill").return # # sys_truncate(const char __user * path, unsigned long length) # sys_truncate64(const char __user * path, loff_t length) +# COMPAT_SYSCALL_DEFINE2(truncate, const char __user *, path, +# compat_off_t, length) # probe syscall.truncate = kernel.function("sys_truncate").call ?, - kernel.function("sys_truncate64").call ? + kernel.function("sys_truncate64").call ?, + kernel.function("compat_sys_truncate").call ? { name = "truncate" path_uaddr = $path @@ -3378,7 +3381,8 @@ probe syscall.truncate = kernel.function("sys_truncate").call ?, argstr = sprintf("%s, %d", user_string_quoted($path), $length) } probe syscall.truncate.return = kernel.function("sys_truncate").return ?, - kernel.function("sys_truncate64").return ? + kernel.function("sys_truncate64").return ?, + kernel.function("compat_sys_truncate").return ? { name = "truncate" retstr = return_str(1, $return) -- 2.43.5