From 73c9ddcaded860cbfea03b3688a978b12bc2812e Mon Sep 17 00:00:00 2001 From: Martin Cermak Date: Tue, 3 Jan 2017 07:51:02 +0100 Subject: [PATCH] PR20333/sendto --- tapset/linux/nd_syscalls2.stp | 72 ----------------- tapset/linux/sysc_sendto.stp | 143 ++++++++++++++++++++++++++++++++++ tapset/linux/syscalls2.stp | 63 --------------- 3 files changed, 143 insertions(+), 135 deletions(-) create mode 100644 tapset/linux/sysc_sendto.stp diff --git a/tapset/linux/nd_syscalls2.stp b/tapset/linux/nd_syscalls2.stp index c4c02e1a8..6ac1e796d 100644 --- a/tapset/linux/nd_syscalls2.stp +++ b/tapset/linux/nd_syscalls2.stp @@ -1,76 +1,4 @@ -# sendto _____________________________________________________ -# -# long sys_sendto(int fd, -# void __user * buff, -# size_t len, -# unsigned flags, -# struct sockaddr __user *addr, -# int addr_len) -# -probe nd_syscall.sendto = __nd_syscall.sendto ?, - __nd_syscall.socketcall.sendto ?, - __nd_syscall.compat_socketcall.sendto ? -{ - name = "sendto" - flags_str = _msg_flags_str(flags) - buf = user_buffer_quoted(buf_uaddr, len, syscall_string_trunc) - argstr = sprintf("%d, %s, %u, %s, %s, %u", s, buf, len, flags_str, - _struct_sockaddr_u(to_uaddr, tolen), tolen) -} -probe __nd_syscall.sendto = kprobe.function("sys_sendto").call ? -{ - asmlinkage() - @__syscall_gate(@const("__NR_sendto")) - s = int_arg(1) - buf_uaddr = pointer_arg(2) - len = ulong_arg(3) - flags = uint_arg(4) - to_uaddr = pointer_arg(5) - tolen = uint_arg(6) -} -probe __nd_syscall.socketcall.sendto = kprobe.function("sys_socketcall").call ? -{ - asmlinkage() - if (int_arg(1) != @const("SYS_SENDTO")) next; - __args = &@cast(pointer_arg(2), "ulong", "kernel") - s = __int32(user_ulong(&(__args)[0])) - buf_uaddr = user_ulong(&(__args)[1]) - len = user_ulong(&(__args)[2]) - flags = __uint32(user_ulong(&(__args)[3])) - to_uaddr = user_ulong(&(__args)[4]) - tolen = __uint32(user_ulong(&(__args)[5])) -} -probe __nd_syscall.compat_socketcall.sendto = - kprobe.function("compat_sys_socketcall").call ? -{ - asmlinkage() - if (int_arg(1) != @const("SYS_SENDTO")) next; - __args = &@cast(pointer_arg(2), "unsigned int", "kernel") - s = user_int(&(__args)[0]) - buf_uaddr = user_uint32(&(__args)[1]) - len = user_uint32(&(__args)[2]) - flags = user_uint32(&(__args)[3]) - to_uaddr = user_uint32(&(__args)[4]) - tolen = user_uint32(&(__args)[5]) -} -probe nd_syscall.sendto.return = __nd_syscall.sendto.return ?, - __nd_syscall.socketcall.sendto.return ? -{ - name = "sendto" - retstr = returnstr(1) -} -probe __nd_syscall.sendto.return = kprobe.function("sys_sendto").return ? -{ - @__syscall_gate(@const("__NR_sendto")) -} -probe __nd_syscall.socketcall.recv.return = - kprobe.function("sys_socketcall").return ?, - kprobe.function("compat_sys_socketcall").return ? -{ - if (@entry(__asmlinkage_int_arg(1)) != @const("SYS_SENDTO")) next; -} - # setdomainname ______________________________________________ # # asmlinkage long diff --git a/tapset/linux/sysc_sendto.stp b/tapset/linux/sysc_sendto.stp new file mode 100644 index 000000000..e624f030f --- /dev/null +++ b/tapset/linux/sysc_sendto.stp @@ -0,0 +1,143 @@ +# sendto _____________________________________________________ +# +# long sys_sendto(int fd, +# void __user * buff, +# size_t len, +# unsigned flags, +# struct sockaddr __user *addr, +# int addr_len) +# + +@define _SYSCALL_SENDTO_NAME +%( + name = "sendto" +%) + +@define _SYSCALL_SENDTO_ARGSTR +%( + argstr = sprintf("%d, %s, %u, %s, %s, %u", s, buf, len, flags_str, to_str, tolen) +%) + +probe syscall.sendto = dw_syscall.sendto !, nd_syscall.sendto {} +probe syscall.sendto.return = dw_syscall.sendto.return !, nd_syscall.sendto.return {} + +# dw_sendto _____________________________________________________ + +probe dw_syscall.sendto = __syscall.sendto ?, __syscall.socketcall.sendto ?, + __syscall.compat_socketcall.sendto ? +{ + @_SYSCALL_SENDTO_NAME + flags_str = _msg_flags_str(flags) + buf = user_buffer_quoted(buf_uaddr, len, syscall_string_trunc) + to_str = _struct_sockaddr_u(to_uaddr, tolen) + @_SYSCALL_SENDTO_ARGSTR +} +probe __syscall.sendto = kernel.function("sys_sendto").call ? +{ + @__syscall_gate(@const("__NR_sendto")) + s = __int32($fd) + buf_uaddr = $buff + len = __ulong($len) + flags = __uint32($flags) + to_uaddr = $addr + tolen = __uint32($addr_len) +} +probe __syscall.socketcall.sendto = kernel.function("sys_socketcall").call ? +{ + if ($call != @const("SYS_SENDTO")) next; + s = __int32(user_ulong(&@cast($args, "ulong")[0])) + buf_uaddr = user_ulong(&@cast($args, "ulong")[1]) + len = user_ulong(&@cast($args, "ulong")[2]) + flags = __uint32(user_ulong(&@cast($args, "ulong")[3])) + to_uaddr = user_ulong(&@cast($args, "ulong")[4]) + tolen = __uint32(user_ulong(&@cast($args, "ulong")[5])) +} +probe __syscall.compat_socketcall.sendto = + kernel.function("compat_sys_socketcall").call ? +{ + if ($call != @const("SYS_SENDTO")) next; + s = user_int(&@cast($args, "unsigned int")[0]) + buf_uaddr = user_uint32(&@cast($args, "unsigned int")[1]) + len = user_uint32(&@cast($args, "unsigned int")[2]) + flags = user_uint32(&@cast($args, "unsigned int")[3]) + to_uaddr = user_uint32(&@cast($args, "unsigned int")[4]) + tolen = user_uint32(&@cast($args, "unsigned int")[5]) +} +probe dw_syscall.sendto.return = kernel.function("sys_sendto").return ?, + kernel.function("sys_socketcall").return ?, + kernel.function("compat_sys_socketcall").return ? +{ + if (@defined(@entry($call))) { + if (@entry($call) != @const("SYS_SENDTO")) next; + } + else { + @__syscall_gate(@const("__NR_sendto")) + } + @_SYSCALL_SENDTO_NAME + retstr = return_str(1, $return) +} + +# nd_sendto _____________________________________________________ + +probe nd_syscall.sendto = __nd_syscall.sendto ?, + __nd_syscall.socketcall.sendto ?, + __nd_syscall.compat_socketcall.sendto ? +{ + @_SYSCALL_SENDTO_NAME + flags_str = _msg_flags_str(flags) + buf = user_buffer_quoted(buf_uaddr, len, syscall_string_trunc) + to_str = _struct_sockaddr_u(to_uaddr, tolen) + @_SYSCALL_SENDTO_ARGSTR +} +probe __nd_syscall.sendto = kprobe.function("sys_sendto").call ? +{ + asmlinkage() + @__syscall_gate(@const("__NR_sendto")) + s = int_arg(1) + buf_uaddr = pointer_arg(2) + len = ulong_arg(3) + flags = uint_arg(4) + to_uaddr = pointer_arg(5) + tolen = uint_arg(6) +} +probe __nd_syscall.socketcall.sendto = kprobe.function("sys_socketcall").call ? +{ + asmlinkage() + if (int_arg(1) != @const("SYS_SENDTO")) next; + __args = &@cast(pointer_arg(2), "ulong", "kernel") + s = __int32(user_ulong(&(__args)[0])) + buf_uaddr = user_ulong(&(__args)[1]) + len = user_ulong(&(__args)[2]) + flags = __uint32(user_ulong(&(__args)[3])) + to_uaddr = user_ulong(&(__args)[4]) + tolen = __uint32(user_ulong(&(__args)[5])) +} +probe __nd_syscall.compat_socketcall.sendto = + kprobe.function("compat_sys_socketcall").call ? +{ + asmlinkage() + if (int_arg(1) != @const("SYS_SENDTO")) next; + __args = &@cast(pointer_arg(2), "unsigned int", "kernel") + s = user_int(&(__args)[0]) + buf_uaddr = user_uint32(&(__args)[1]) + len = user_uint32(&(__args)[2]) + flags = user_uint32(&(__args)[3]) + to_uaddr = user_uint32(&(__args)[4]) + tolen = user_uint32(&(__args)[5]) +} +probe nd_syscall.sendto.return = __nd_syscall.sendto.return ?, + __nd_syscall.socketcall.sendto.return ? +{ + @_SYSCALL_SENDTO_NAME + retstr = returnstr(1) +} +probe __nd_syscall.sendto.return = kprobe.function("sys_sendto").return ? +{ + @__syscall_gate(@const("__NR_sendto")) +} +probe __nd_syscall.socketcall.recv.return = + kprobe.function("sys_socketcall").return ?, + kprobe.function("compat_sys_socketcall").return ? +{ + if (@entry(__asmlinkage_int_arg(1)) != @const("SYS_SENDTO")) next; +} diff --git a/tapset/linux/syscalls2.stp b/tapset/linux/syscalls2.stp index b5941be58..a790a1b99 100644 --- a/tapset/linux/syscalls2.stp +++ b/tapset/linux/syscalls2.stp @@ -1,67 +1,4 @@ -# sendto _____________________________________________________ -# -# long sys_sendto(int fd, -# void __user * buff, -# size_t len, -# unsigned flags, -# struct sockaddr __user *addr, -# int addr_len) -# -probe syscall.sendto = __syscall.sendto ?, __syscall.socketcall.sendto ?, - __syscall.compat_socketcall.sendto ? -{ - name = "sendto" - flags_str = _msg_flags_str(flags) - buf = user_buffer_quoted(buf_uaddr, len, syscall_string_trunc) - argstr = sprintf("%d, %s, %u, %s, %s, %u", s, buf, len, flags_str, - _struct_sockaddr_u(to_uaddr, tolen), tolen) -} -probe __syscall.sendto = kernel.function("sys_sendto").call ? -{ - @__syscall_gate(@const("__NR_sendto")) - s = __int32($fd) - buf_uaddr = $buff - len = __ulong($len) - flags = __uint32($flags) - to_uaddr = $addr - tolen = __uint32($addr_len) -} -probe __syscall.socketcall.sendto = kernel.function("sys_socketcall").call ? -{ - if ($call != @const("SYS_SENDTO")) next; - s = __int32(user_ulong(&@cast($args, "ulong")[0])) - buf_uaddr = user_ulong(&@cast($args, "ulong")[1]) - len = user_ulong(&@cast($args, "ulong")[2]) - flags = __uint32(user_ulong(&@cast($args, "ulong")[3])) - to_uaddr = user_ulong(&@cast($args, "ulong")[4]) - tolen = __uint32(user_ulong(&@cast($args, "ulong")[5])) -} -probe __syscall.compat_socketcall.sendto = - kernel.function("compat_sys_socketcall").call ? -{ - if ($call != @const("SYS_SENDTO")) next; - s = user_int(&@cast($args, "unsigned int")[0]) - buf_uaddr = user_uint32(&@cast($args, "unsigned int")[1]) - len = user_uint32(&@cast($args, "unsigned int")[2]) - flags = user_uint32(&@cast($args, "unsigned int")[3]) - to_uaddr = user_uint32(&@cast($args, "unsigned int")[4]) - tolen = user_uint32(&@cast($args, "unsigned int")[5]) -} -probe syscall.sendto.return = kernel.function("sys_sendto").return ?, - kernel.function("sys_socketcall").return ?, - kernel.function("compat_sys_socketcall").return ? -{ - if (@defined(@entry($call))) { - if (@entry($call) != @const("SYS_SENDTO")) next; - } - else { - @__syscall_gate(@const("__NR_sendto")) - } - name = "sendto" - retstr = return_str(1, $return) -} - # setdomainname ______________________________________________ # # asmlinkage long -- 2.43.5