From: Martin Cermak Date: Thu, 22 Dec 2016 14:41:05 +0000 (+0100) Subject: PR20333/connect X-Git-Tag: release-3.1~495 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=1a8e0ce47dbbe481ee28f10078881dda0db9f8bc;p=systemtap.git PR20333/connect --- diff --git a/tapset/linux/nd_syscalls.stp b/tapset/linux/nd_syscalls.stp index d7862162c..a435eb23f 100644 --- a/tapset/linux/nd_syscalls.stp +++ b/tapset/linux/nd_syscalls.stp @@ -1,57 +1,3 @@ -# connect ____________________________________________________ -# long sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen) -probe nd_syscall.connect = __nd_syscall.connect ?, - __nd_syscall.socketcall.connect ?, - __nd_syscall.compat_socketcall.connect ? -{ - name = "connect" - @_af_inet_info_u(serv_addr_uaddr, addrlen) - argstr = sprintf("%d, %s, %u", sockfd, - _struct_sockaddr_u(serv_addr_uaddr, addrlen), addrlen) -} -probe __nd_syscall.connect = kprobe.function("sys_connect") ? -{ - @__syscall_gate(@const("__NR_connect")) - asmlinkage() - sockfd = int_arg(1) - serv_addr_uaddr = pointer_arg(2) - addrlen = uint_arg(3) -} -probe __nd_syscall.socketcall.connect = kprobe.function("sys_socketcall").call ? -{ - asmlinkage() - if (int_arg(1) != @const("SYS_CONNECT")) next; - __args = &@cast(pointer_arg(2), "ulong", "kernel") - sockfd = __int32(user_ulong(&(__args)[0])) - serv_addr_uaddr = user_ulong(&(__args)[1]) - addrlen = __uint32(user_ulong(&(__args)[2])) -} -probe __nd_syscall.compat_socketcall.connect = - kprobe.function("compat_sys_socketcall").call ? -{ - asmlinkage() - if (int_arg(1) != @const("SYS_CONNECT")) next; - __args = &@cast(pointer_arg(2), "unsigned int", "kernel") - sockfd = user_int(&(__args)[0]) - serv_addr_uaddr = user_uint32(&(__args)[1]) - addrlen = user_uint32(&(__args)[2]) -} -probe nd_syscall.connect.return = __nd_syscall.connect.return ?, - __nd_syscall.socketcall.connect.return ? -{ - name = "connect" - retstr = returnstr(1) -} -probe __nd_syscall.connect.return = kprobe.function("sys_connect").return ? -{ - @__syscall_gate(@const("__NR_connect")) -} -probe __nd_syscall.socketcall.connect.return = - kprobe.function("sys_socketcall").return ?, - kprobe.function("compat_sys_socketcall").return ? -{ - if (@entry(__asmlinkage_int_arg(1)) != @const("SYS_CONNECT")) next; -} # copy_file_range ___________________________________________ # SYSCALL_DEFINE6(copy_file_range, int, fd_in, loff_t __user *, off_in, diff --git a/tapset/linux/sysc_connect.stp b/tapset/linux/sysc_connect.stp new file mode 100644 index 000000000..a4358ae0f --- /dev/null +++ b/tapset/linux/sysc_connect.stp @@ -0,0 +1,118 @@ +# connect ____________________________________________________ +# long sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen) + +@define _SYSCALL_CONNECT_NAME +%( + name = "connect" +%) + +@define _SYSCALL_CONNECT_ARGSTR +%( + argstr = sprintf("%d, %s, %u", sockfd, + _struct_sockaddr_u(serv_addr_uaddr, addrlen), addrlen) +%) + +probe syscall.connect = dw_syscall.connect !, nd_syscall.connect {} +probe syscall.connect.return = dw_syscall.connect.return !, nd_syscall.connect.return {} + +# dw_connect _____________________________________________________ + +probe dw_syscall.connect = __syscall.connect ?, __syscall.socketcall.connect ?, + __syscall.compat_socketcall.connect ? +{ + @_SYSCALL_CONNECT_NAME + @_af_inet_info_u(serv_addr_uaddr, addrlen) + @_SYSCALL_CONNECT_ARGSTR +} +probe __syscall.connect = kernel.function("sys_connect").call ? +{ + @__syscall_gate(@const("__NR_connect")) + sockfd = __int32($fd) + serv_addr_uaddr = $uservaddr + addrlen = __uint32($addrlen) +} +probe __syscall.socketcall.connect = kernel.function("sys_socketcall").call ? +{ + if ($call != @const("SYS_CONNECT")) next; + sockfd = __int32(user_ulong(&@cast($args, "ulong")[0])) + serv_addr_uaddr = user_ulong(&@cast($args, "ulong")[1]) + addrlen = __uint32(user_ulong(&@cast($args, "ulong")[2])) +} +probe __syscall.compat_socketcall.connect = + kernel.function("compat_sys_socketcall").call ? +{ + if ($call != @const("SYS_CONNECT")) next; + sockfd = user_int(&@cast($args, "unsigned int")[0]) + serv_addr_uaddr = user_uint32(&@cast($args, "unsigned int")[1]) + addrlen = user_uint32(&@cast($args, "unsigned int")[2]) +} +probe dw_syscall.connect.return = __syscall.connect.return ?, + __syscall.socketcall.connect.return ? +{ + @_SYSCALL_CONNECT_NAME + retstr = return_str(1, $return) +} +probe __syscall.connect.return = kernel.function("sys_connect").return ? +{ + @__syscall_gate(@const("__NR_connect")) +} +probe __syscall.socketcall.connect.return = + kernel.function("sys_socketcall").return ?, + kernel.function("compat_sys_socketcall").return ? +{ + if (@entry($call) != @const("SYS_CONNECT")) next; +} + +# nd_connect _____________________________________________________ + +probe nd_syscall.connect = __nd_syscall.connect ?, + __nd_syscall.socketcall.connect ?, + __nd_syscall.compat_socketcall.connect ? +{ + @_SYSCALL_CONNECT_NAME + @_af_inet_info_u(serv_addr_uaddr, addrlen) + @_SYSCALL_CONNECT_ARGSTR +} +probe __nd_syscall.connect = kprobe.function("sys_connect") ? +{ + @__syscall_gate(@const("__NR_connect")) + asmlinkage() + sockfd = int_arg(1) + serv_addr_uaddr = pointer_arg(2) + addrlen = uint_arg(3) +} +probe __nd_syscall.socketcall.connect = kprobe.function("sys_socketcall").call ? +{ + asmlinkage() + if (int_arg(1) != @const("SYS_CONNECT")) next; + __args = &@cast(pointer_arg(2), "ulong", "kernel") + sockfd = __int32(user_ulong(&(__args)[0])) + serv_addr_uaddr = user_ulong(&(__args)[1]) + addrlen = __uint32(user_ulong(&(__args)[2])) +} +probe __nd_syscall.compat_socketcall.connect = + kprobe.function("compat_sys_socketcall").call ? +{ + asmlinkage() + if (int_arg(1) != @const("SYS_CONNECT")) next; + __args = &@cast(pointer_arg(2), "unsigned int", "kernel") + sockfd = user_int(&(__args)[0]) + serv_addr_uaddr = user_uint32(&(__args)[1]) + addrlen = user_uint32(&(__args)[2]) +} +probe nd_syscall.connect.return = __nd_syscall.connect.return ?, + __nd_syscall.socketcall.connect.return ? +{ + @_SYSCALL_CONNECT_NAME + retstr = returnstr(1) +} +probe __nd_syscall.connect.return = kprobe.function("sys_connect").return ? +{ + @__syscall_gate(@const("__NR_connect")) +} +probe __nd_syscall.socketcall.connect.return = + kprobe.function("sys_socketcall").return ?, + kprobe.function("compat_sys_socketcall").return ? +{ + if (@entry(__asmlinkage_int_arg(1)) != @const("SYS_CONNECT")) next; +} diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index 9f534a9cc..1f8538c4c 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -1,53 +1,4 @@ -# connect ____________________________________________________ -# long sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen) -probe syscall.connect = __syscall.connect ?, __syscall.socketcall.connect ?, - __syscall.compat_socketcall.connect ? -{ - name = "connect" - @_af_inet_info_u(serv_addr_uaddr, addrlen) - argstr = sprintf("%d, %s, %u", sockfd, - _struct_sockaddr_u(serv_addr_uaddr, addrlen), addrlen) -} -probe __syscall.connect = kernel.function("sys_connect").call ? -{ - @__syscall_gate(@const("__NR_connect")) - sockfd = __int32($fd) - serv_addr_uaddr = $uservaddr - addrlen = __uint32($addrlen) -} -probe __syscall.socketcall.connect = kernel.function("sys_socketcall").call ? -{ - if ($call != @const("SYS_CONNECT")) next; - sockfd = __int32(user_ulong(&@cast($args, "ulong")[0])) - serv_addr_uaddr = user_ulong(&@cast($args, "ulong")[1]) - addrlen = __uint32(user_ulong(&@cast($args, "ulong")[2])) -} -probe __syscall.compat_socketcall.connect = - kernel.function("compat_sys_socketcall").call ? -{ - if ($call != @const("SYS_CONNECT")) next; - sockfd = user_int(&@cast($args, "unsigned int")[0]) - serv_addr_uaddr = user_uint32(&@cast($args, "unsigned int")[1]) - addrlen = user_uint32(&@cast($args, "unsigned int")[2]) -} -probe syscall.connect.return = __syscall.connect.return ?, - __syscall.socketcall.connect.return ? -{ - name = "connect" - retstr = return_str(1, $return) -} -probe __syscall.connect.return = kernel.function("sys_connect").return ? -{ - @__syscall_gate(@const("__NR_connect")) -} -probe __syscall.socketcall.connect.return = - kernel.function("sys_socketcall").return ?, - kernel.function("compat_sys_socketcall").return ? -{ - if (@entry($call) != @const("SYS_CONNECT")) next; -} - # copy_file_range ___________________________________________ # SYSCALL_DEFINE6(copy_file_range, int, fd_in, loff_t __user *, off_in, # int, fd_out, loff_t __user *, off_out,