php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay
files >> /var/www/html/sub/images/sym/root/usr/share/systemtap/tapset/linux/ |
files >> /var/www/html/sub/images/sym/root/usr/share/systemtap/tapset/linux/nd_syscalls.stp |
// syscalls tapset part 1 [A-M] // Copyright (C) 2005 IBM Corp. // Copyright (C) 2005-2014 Red Hat Inc. // Copyright (C) 2007 Quentin Barnes. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. /* * nd_syscalls.stp is a copy of syscalls.stp, modified to refer to * function arguments by number rather than name, so that this tapset * can be used even when the probed kernel lacks debugging information. */ /* Each syscall returns the calls parameters. In addition, the following * variables are set: * * name - generally the syscall name minus the "sys_". * * argstr - a string containing the decoded args in an easy-to-read format. * It doesn't need to contain everything, but should have all the * important args. Set in entry probes only. Values enclosed in * square brackets are user-space pointers. Values in curly * braces are decoded structs. * * retstr - a string containing the return value in an easy-to-read format. * Set in return probes only. */ # accept _____________________________________________________ # long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, # int __user *upeer_addrlen) # probe nd_syscall.accept = __nd_syscall.accept ?, __nd_syscall.socketcall.accept ?, __nd_syscall.compat_socketcall.accept ? { name = "accept" %(systemtap_v <= "2.5" %? # systemtap <= 2.5 combined accept and accept4 flags = 0 flags_str = "0x0" # 'flag_str should have been 'flags_str'. Deprecate the old name. %(systemtap_v <= "1.4" %? flag_str = "0x0" %) argstr = sprintf("%d, %p, %p, %s", sockfd, addr_uaddr, addrlen_uaddr, flags_str) %: argstr = sprintf("%d, %p, %p", sockfd, addr_uaddr, addrlen_uaddr) %) } probe __nd_syscall.accept = kprobe.function("sys_accept").call { asmlinkage() @__syscall_gate(%{ __NR_accept %}) sockfd = int_arg(1) addr_uaddr = pointer_arg(2) addrlen_uaddr = pointer_arg(3) } probe __nd_syscall.socketcall.accept = kprobe.function("sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_ACCEPT %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") sockfd = __int32(user_ulong(&(__args)[0])) addr_uaddr = user_ulong(&(__args)[1]) addrlen_uaddr = user_ulong(&(__args)[2]) } probe __nd_syscall.compat_socketcall.accept = kprobe.function("compat_sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_ACCEPT %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") sockfd = user_int(&(__args)[0]) addr_uaddr = user_uint32(&(__args)[1]) addrlen_uaddr = user_uint32(&(__args)[2]) } probe nd_syscall.accept.return = __nd_syscall.accept.return ?, __nd_syscall.socketcall.accept.return ? { name = "accept" retstr = returnstr(1) } probe __nd_syscall.accept.return = kprobe.function("sys_accept").return ? { @__syscall_gate(%{ __NR_accept %}) } probe __nd_syscall.socketcall.accept.return = kprobe.function("sys_socketcall").return ?, kprobe.function("compat_sys_socketcall").return ? { if (@entry(__asmlinkage_int_arg(1)) != %{ SYS_ACCEPT %}) next; } # accept4 ____________________________________________________ # # SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, # int __user *, upeer_addrlen, int, flags) # probe nd_syscall.accept4 = __nd_syscall.accept4 ?, __nd_syscall.socketcall.accept4 ?, __nd_syscall.compat_socketcall.accept4 ? { name = "accept4" flags_str = _sock_flags_str(flags) argstr = sprintf("%d, %p, %p, %s", sockfd, addr_uaddr, addrlen_uaddr, flags_str) } probe __nd_syscall.accept4 = kprobe.function("sys_accept4").call { asmlinkage() // On all tested platforms, there wasn't a different syscall // number for the compat version of accept4(). @__syscall_nr_gate(%{ __NR_accept4 %}) sockfd = int_arg(1) addr_uaddr = pointer_arg(2) addrlen_uaddr = pointer_arg(3) flags = int_arg(4) } probe __nd_syscall.socketcall.accept4 = kprobe.function("sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_ACCEPT4 %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") sockfd = __int32(user_ulong(&(__args)[0])) addr_uaddr = user_ulong(&(__args)[1]) addrlen_uaddr = user_ulong(&(__args)[2]) flags = __int32(user_ulong(&(__args)[3])) } probe __nd_syscall.compat_socketcall.accept4 = kprobe.function("compat_sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_ACCEPT4 %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") sockfd = user_int(&(__args)[0]) addr_uaddr = user_uint32(&(__args)[1]) addrlen_uaddr = user_uint32(&(__args)[2]) flags = user_int(&(__args)[3]) } probe nd_syscall.accept4.return = __nd_syscall.accept4.return ?, __nd_syscall.socketcall.accept4.return ? { name = "accept4" retstr = returnstr(1) } probe __nd_syscall.accept4.return = kprobe.function("sys_accept4").return ? { @__syscall_nr_gate(%{ __NR_accept4 %}) } probe __nd_syscall.socketcall.accept4.return = kprobe.function("sys_socketcall").return ?, kprobe.function("compat_sys_socketcall").return ? { if (@entry(__asmlinkage_int_arg(1)) != %{ SYS_ACCEPT4 %}) next; } # access _____________________________________________________ # long sys_access(const char __user * filename, int mode) probe nd_syscall.access = kprobe.function("sys_access") ? { name = "access" asmlinkage() pathname = user_string_quoted(pointer_arg(1)) mode = int_arg(2) mode_str = _access_mode_str(mode) argstr = sprintf("%s, %s", user_string_quoted(pointer_arg(1)), mode_str) } probe nd_syscall.access.return = kprobe.function("sys_access").return ? { name = "access" retstr = returnstr(1) } # acct _______________________________________________________ # long sys_acct(const char __user *name) probe nd_syscall.acct = kprobe.function("sys_acct") ? { name = "acct" asmlinkage() filename = user_string_quoted(pointer_arg(1)) argstr = user_string_quoted(pointer_arg(1)) } probe nd_syscall.acct.return = kprobe.function("sys_acct").return ? { name = "acct" retstr = returnstr(1) } # add_key ____________________________________________________ # long sys_add_key(const char __user *_type, # const char __user *_description, # const void __user *_payload, # size_t plen, # key_serial_t ringid) # probe nd_syscall.add_key = kprobe.function("sys_add_key") ? { name = "add_key" asmlinkage() type_uaddr = pointer_arg(1) description_uaddr = pointer_arg(2) payload_uaddr = pointer_arg(3) plen = ulong_arg(4) ringid = int_arg(5) argstr = sprintf("%s, %s, %s, %u, %d", user_string_quoted(type_uaddr), user_string_quoted(description_uaddr), user_string_n2_quoted(payload_uaddr, plen, syscall_string_trunc), plen, ringid) } probe nd_syscall.add_key.return = kprobe.function("sys_add_key").return ? { name = "add_key" retstr = returnstr(1) } # adjtimex ___________________________________________________ # long sys_adjtimex(struct timex __user *txc_p) probe nd_syscall.adjtimex = kprobe.function("sys_adjtimex") ? { name = "adjtimex" asmlinkage() buf_uaddr = pointer_arg(1) buf_str = _struct_timex_u(buf_uaddr) argstr = sprintf("%s", buf_str) } probe nd_syscall.adjtimex.return = kprobe.function("sys_adjtimex").return ? { name = "adjtimex" retstr = _adjtimex_return_str(returnval()) } # long compat_sys_adjtimex(struct compat_timex __user *utp) probe nd_syscall.compat_adjtimex = kprobe.function("compat_sys_adjtimex") ? { name = "adjtimex" asmlinkage() buf_uaddr = pointer_arg(1) buf_str = _struct_compat_timex_u(buf_uaddr) argstr = sprintf("%s", buf_str) } probe nd_syscall.compat_adjtimex.return = kprobe.function("compat_sys_adjtimex").return ? { name = "compat_adjtimex" retstr = _adjtimex_return_str(returnval()) } # alarm ______________________________________________________ # unsigned long sys_alarm (unsigned int seconds) # long sys32_alarm(unsigned int seconds) # probe nd_syscall.alarm = kprobe.function("sys32_alarm") ?, kprobe.function("sys_alarm") ? { name = "alarm" asmlinkage() seconds = uint_arg(1) argstr = sprint(seconds) } probe nd_syscall.alarm.return = kprobe.function("sys32_alarm").return ?, kprobe.function("sys_alarm").return ? { name = "alarm" retstr = returnstr(1) } # bdflush ____________________________________________________ # long sys_bdflush(int func, long data) probe nd_syscall.bdflush = kprobe.function("sys_bdflush") ? { name = "bdflush" asmlinkage() func = int_arg(1) data = long_arg(2) if ((func >= 2) && (func % 2 == 0)) data_str = sprintf("%p", data) else data_str = sprintf("%d", data) argstr = sprintf("%d, %s", func, data_str) } probe nd_syscall.bdflush.return = kprobe.function("sys_bdflush").return ? { name = "bdflush" retstr = returnstr(1) } # bind _______________________________________________________ # long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) probe nd_syscall.bind = __nd_syscall.bind ?, __nd_syscall.socketcall.bind ?, __nd_syscall.compat_socketcall.bind ? { name = "bind" @_af_inet_info_u(my_addr_uaddr, addrlen) argstr = sprintf("%d, %s, %d", sockfd, _struct_sockaddr_u(my_addr_uaddr, addrlen), addrlen) } probe __nd_syscall.bind = kprobe.function("sys_bind") ? { @__syscall_gate(%{ __NR_bind %}) asmlinkage() sockfd = int_arg(1) my_addr_uaddr = pointer_arg(2) addrlen = int_arg(3) } probe __nd_syscall.socketcall.bind = kprobe.function("sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_BIND %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") sockfd = __int32(user_ulong(&(__args)[0])) my_addr_uaddr = user_ulong(&(__args)[1]) addrlen = __int32(user_ulong(&(__args)[2])) } probe __nd_syscall.compat_socketcall.bind = kprobe.function("compat_sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_BIND %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") sockfd = user_int(&(__args)[0]) my_addr_uaddr = user_uint32(&(__args)[1]) addrlen = user_int(&(__args)[2]) } probe nd_syscall.bind.return = __nd_syscall.bind.return ?, __nd_syscall.socketcall.bind.return ? { name = "bind" retstr = returnstr(1) } probe __nd_syscall.bind.return = kprobe.function("sys_bind").return ? { @__syscall_gate(%{ __NR_bind %}) } probe __nd_syscall.socketcall.bind.return = kprobe.function("sys_socketcall").return ?, kprobe.function("compat_sys_socketcall").return ? { if (@entry(__asmlinkage_int_arg(1)) != %{ SYS_BIND %}) next; } # bpf ________________________________________________________ # SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, # unsigned int, size) probe nd_syscall.bpf = kprobe.function("sys_bpf") ? { name = "bpf" asmlinkage() cmd = int_arg(1) cmd_str = _bpf_cmd_str(cmd) attr_uaddr = pointer_arg(2) size = uint_arg(3) argstr = sprintf("%s, %p, %u", cmd_str, attr_uaddr, size) } probe nd_syscall.bpf.return = kprobe.function("sys_bpf").return ? { name = "bpf" retstr = returnstr(1) } # brk ________________________________________________________ # unsigned long sys_brk(unsigned long brk) probe nd_syscall.brk = kprobe.function("ia64_brk") ?, kprobe.function("sys_brk") ? { name = "brk" asmlinkage() brk = ulong_arg(1) argstr = sprintf("%p", brk) } probe nd_syscall.brk.return = kprobe.function("ia64_brk").return ?, kprobe.function("sys_brk").return ? { name = "brk" retstr = returnstr(1) } # capget _____________________________________________________ /* * NOTE * this is probably not a good function * to probe. The structures are always * changing. It also seems like it is * not really used. Cscope produced no * reference of this function in the * kernel (returned no callers). Perhaps * cap_get_proc / cap_set_proc are better * functions to export. */ # long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) probe nd_syscall.capget = kprobe.function("sys_capget") ? { name = "capget" asmlinkage() header_uaddr = pointer_arg(1) data_uaddr = pointer_arg(2) argstr = sprintf("%p, %p", header_uaddr, data_uaddr) } probe nd_syscall.capget.return = kprobe.function("sys_capget").return ? { name = "capget" retstr = returnstr(1) } # capset _____________________________________________________ /* * NOTE * this is probably not a good function * to probe. The structures are always * changing. It also seems like it is * not really used. Cscope produced no * reference of this function in the * kernel (returned no callers). Perhaps * cap_get_proc / cap_set_proc are better * functions to export. */ # long sys_capset(cap_user_header_t header, const cap_user_data_t data) probe nd_syscall.capset = kprobe.function("sys_capset") ? { name = "capset" asmlinkage() header_uaddr = pointer_arg(1) data_uaddr = pointer_arg(2) argstr = sprintf("%p, %p", header_uaddr, data_uaddr) } probe nd_syscall.capset.return = kprobe.function("sys_capset").return ? { name = "capset" retstr = returnstr(1) } # chdir ______________________________________________________ # long sys_chdir(const char __user * filename) probe nd_syscall.chdir = kprobe.function("sys_chdir") ? { name = "chdir" asmlinkage() path = user_string_quoted(pointer_arg(1)) argstr = user_string_quoted(pointer_arg(1)) } probe nd_syscall.chdir.return = kprobe.function("sys_chdir").return ? { name = "chdir" retstr = returnstr(1) } # chmod ______________________________________________________ # long sys_chmod(const char __user * filename, mode_t mode) probe nd_syscall.chmod = kprobe.function("sys_chmod") ? { name = "chmod" asmlinkage() path = user_string_quoted(pointer_arg(1)) mode = uint_arg(2) argstr = sprintf("%s, %#o", user_string_quoted(pointer_arg(1)), mode) } probe nd_syscall.chmod.return = kprobe.function("sys_chmod").return ? { name = "chmod" retstr = returnstr(1) } # chown ______________________________________________________ # long sys_chown(const char __user * filename, uid_t user, gid_t group) probe nd_syscall.chown = kprobe.function("sys_chown") ? { // Avoid chown16() calling chown(). %( arch == "x86_64" %? @__syscall_compat_gate(%{ __NR_chown %}, %{ __NR_ia32_chown32 %}) %) %( arch == "i386" %? @__syscall_gate(%{ __NR_chown32 %}) %) name = "chown" asmlinkage() path = user_string_quoted(pointer_arg(1)) owner = __int32(uint_arg(2)) group = __int32(uint_arg(3)) argstr = sprintf("%s, %d, %d", user_string_quoted(pointer_arg(1)), owner, group) } probe nd_syscall.chown.return = kprobe.function("sys_chown").return ? { %( arch == "x86_64" %? @__syscall_compat_gate(%{ __NR_chown %}, %{ __NR_ia32_chown32 %}) %) %( arch == "i386" %? @__syscall_gate(%{ __NR_chown32 %}) %) name = "chown" retstr = returnstr(1) } # chown16 ___________________________________________________ # long sys_chown16(const char __user * filename, old_uid_t user, # old_gid_t group) # probe nd_syscall.chown16 = kprobe.function("sys_chown16") ? { name = "chown16" asmlinkage() path = user_string_quoted(pointer_arg(1)) owner = __short(uint_arg(2)) group = __short(uint_arg(3)) argstr = sprintf("%s, %d, %d", user_string_quoted(pointer_arg(1)), owner, group) } probe nd_syscall.chown16.return = kprobe.function("sys_chown16").return ? { name = "chown16" retstr = returnstr(1) } # chroot _____________________________________________________ # long sys_chroot(const char __user * filename) probe nd_syscall.chroot = kprobe.function("sys_chroot") ? { name = "chroot" asmlinkage() path = user_string_quoted(pointer_arg(1)) argstr = user_string_quoted(pointer_arg(1)) } probe nd_syscall.chroot.return = kprobe.function("sys_chroot").return ? { name = "chroot" retstr = returnstr(1) } # clock_adjtime ______________________________________________ # SYSCALL_DEFINE2(clock_adjtime, const clockid_t, which_clock, # struct timex __user *, utx) # long compat_sys_clock_adjtime(clockid_t which_clock, # struct compat_timex __user *utp) # probe nd_syscall.clock_adjtime = __nd_syscall.clock_adjtime ?, __nd_syscall.compat_clock_adjtime ? { name = "clock_adjtime" } probe __nd_syscall.clock_adjtime = kprobe.function("sys_clock_adjtime").call { @__syscall_gate_compat_simple asmlinkage() clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) tx_uaddr = pointer_arg(2) argstr = sprintf("%s, %s", clk_id_str, _struct_timex_u(tx_uaddr)) } probe __nd_syscall.compat_clock_adjtime = kprobe.function("compat_sys_clock_adjtime").call ? { asmlinkage() clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) tx_uaddr = pointer_arg(2) argstr = sprintf("%s, %s", clk_id_str, _struct_compat_timex_u(tx_uaddr)) } probe nd_syscall.clock_adjtime.return = __nd_syscall.clock_adjtime.return ?, kprobe.function("compat_sys_clock_adjtime").return ? { name = "clock_adjtime" retstr = returnstr(1) } probe __nd_syscall.clock_adjtime.return = kprobe.function("sys_clock_adjtime").return { @__syscall_gate_compat_simple } # clock_getres _______________________________________________ # long sys_clock_getres(clockid_t which_clock, struct timespec __user *tp) # long compat_clock_getres(clockid_t which_clock, struct compat_timespec __user *tp) # probe nd_syscall.clock_getres = kprobe.function("compat_clock_getres") ?, kprobe.function("compat_sys_clock_getres") ?, __nd_syscall.clock_getres ? { asmlinkage() name = "clock_getres" clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) res_uaddr = pointer_arg(2) argstr = sprintf("%s, %p", clk_id_str, res_uaddr) } probe __nd_syscall.clock_getres = kprobe.function("sys_clock_getres") { @__syscall_gate(%{ __NR_clock_getres %}) } probe nd_syscall.clock_getres.return = kprobe.function("compat_clock_getres").return ?, kprobe.function("compat_sys_clock_getres").return ?, __nd_syscall.clock_getres.return ? { name = "clock_getres" retstr = returnstr(1) } probe __nd_syscall.clock_getres.return = kprobe.function("sys_clock_getres").return { @__syscall_gate(%{ __NR_clock_getres %}) } # clock_gettime ______________________________________________ # long sys_clock_gettime(clockid_t which_clock, struct timespec __user *tp) # probe nd_syscall.clock_gettime = __nd_syscall.clock_gettime, kprobe.function("compat_sys_clock_gettime") ? { name = "clock_gettime" asmlinkage() clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) tp_uaddr = pointer_arg(2) argstr = sprintf("%s, %p", clk_id_str, tp_uaddr) } probe __nd_syscall.clock_gettime = kprobe.function("sys_clock_gettime").call { @__syscall_gate(%{ __NR_clock_gettime %}) } probe nd_syscall.clock_gettime.return = __nd_syscall.clock_gettime.return, kprobe.function("compat_sys_clock_gettime").return ? { name = "clock_gettime" retstr = returnstr(1) } probe __nd_syscall.clock_gettime.return = kprobe.function("sys_clock_gettime").return { @__syscall_gate(%{ __NR_clock_gettime %}) } # clock_nanosleep ____________________________________________ # long sys_clock_nanosleep(clockid_t which_clock, # int flags, # const struct timespec __user *rqtp, # struct timespec __user *rmtp) # probe nd_syscall.clock_nanosleep = kprobe.function("sys_clock_nanosleep").call { @__syscall_gate(%{ __NR_clock_nanosleep %}) name = "clock_nanosleep" asmlinkage() clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) flags = int_arg(2) %(systemtap_v <= "2.6" %? flag_str = _stp_clock_nanosleep_flags_str(flags) %) flags_str = _stp_clock_nanosleep_flags_str(flags) req_uaddr = pointer_arg(3) rem_uaddr = pointer_arg(4) argstr = sprintf("%s, %s, %s, %p", _get_wc_str(int_arg(1)), flags_str, _struct_timespec_u(req_uaddr, 1), pointer_arg(4)) } probe nd_syscall.clock_nanosleep.return = kprobe.function("sys_clock_nanosleep").return ? { @__syscall_gate(%{ __NR_clock_nanosleep %}) name = "clock_nanosleep" retstr = returnstr(1) } # compat_clock_nanosleep ________________________________________ # # long compat_clock_nanosleep(clockid_t which_clock, int flags, # struct compat_timespec __user *rqtp, # struct compat_timespec __user *rmtp) # probe nd_syscall.compat_clock_nanosleep = kprobe.function("compat_clock_nanosleep").call ?, kprobe.function("compat_sys_clock_nanosleep").call ? { name = "clock_nanosleep" asmlinkage() clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) flags = int_arg(2) %(systemtap_v <= "2.6" %? flag_str = _stp_clock_nanosleep_flags_str(flags) %) flags_str = _stp_clock_nanosleep_flags_str(flags) req_uaddr = pointer_arg(3) rem_uaddr = pointer_arg(4) argstr = sprintf("%s, %s, %s, %p", _get_wc_str(int_arg(1)), flags_str, _struct_compat_timespec_u(req_uaddr, 1), pointer_arg(4)) } probe nd_syscall.compat_clock_nanosleep.return = kprobe.function("compat_clock_nanosleep").return ?, kprobe.function("compat_sys_clock_nanosleep").return ? { name = "clock_nanosleep" retstr = returnstr(1) } # clock_settime ______________________________________________ # long sys_clock_settime(clockid_t which_clock, # const struct timespec __user *tp) # long compat_sys_clock_settime(clockid_t which_clock, # struct compat_timespec __user *tp) # probe nd_syscall.clock_settime = __nd_syscall.clock_settime, __nd_syscall.compat_clock_settime ? { name = "clock_settime" } probe __nd_syscall.clock_settime = kprobe.function("sys_clock_settime").call { @__syscall_gate(%{ __NR_clock_settime %}) asmlinkage() clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) tp_uaddr = pointer_arg(2) argstr = sprintf("%s, %s", clk_id_str, _struct_timespec_u(tp_uaddr, 1)) } probe __nd_syscall.compat_clock_settime = kprobe.function("compat_sys_clock_settime").call ? { asmlinkage() clk_id = int_arg(1) clk_id_str = _get_wc_str(clk_id) tp_uaddr = pointer_arg(2) argstr = sprintf("%s, %s", clk_id_str, _struct_compat_timespec_u(tp_uaddr, 1)) } probe nd_syscall.clock_settime.return = __nd_syscall.clock_settime.return, __nd_syscall.compat_clock_settime.return ? { name = "clock_settime" } probe __nd_syscall.clock_settime.return = kprobe.function("sys_clock_settime").return { @__syscall_gate(%{ __NR_clock_settime %}) retstr = returnstr(1) } probe __nd_syscall.compat_clock_settime.return = kprobe.function("compat_sys_clock_settime").return ? { retstr = returnstr(1) } # clone ______________________________________________________ # # The sys_clone() call was in arch-specific code (sometimes assembly # code), especially in older kernels. Its args varied dramatically, # from full args to getting nothing but registers. To get around this, # we'll just probe do_fork(). The fork()/vfork()/clone() syscalls are # just wrappers around do_fork(). We'll reject all probe hits that # aren't really clone syscalls (such as calls to sys_fork(), # sys_vfork(), and the kernel's internal use of do_fork()). Kernel # commit 3033f14ab78c32 renamed 'do_fork' to '_do_fork'. # # For ia64, this is complicated by the fact that it has a clone2 # syscall. # # kernels < 3.8.0: # long do_fork(unsigned long clone_flags, # unsigned long stack_start, # struct pt_regs *regs, # unsigned long stack_size, # int __user *parent_tidptr, # int __user *child_tidptr) # # kernels >= 3.8.0: # long do_fork(unsigned long clone_flags, # unsigned long stack_start, # unsigned long stack_size, # int __user *parent_tidptr, # int __user *child_tidptr) probe nd_syscall.clone = kprobe.function("_do_fork").call !, kprobe.function("do_fork").call { %( arch != "ia64" %? @__syscall_compat_gate(%{ __NR_clone %}, %{ __NR_compat_clone %}) name = "clone" %: @__syscall_gate2(%{ __NR_clone %}, %{ __NR_clone2 %}) // This is a bit gross. We're depending on @__syscall_gate2() // to set '__nr' for us. If its implementation changes, this will // need to change. if (__nr == %{ /* pure */ __NR_clone %}) name = "clone" else { name = "clone2" %(kernel_v >= "3.8.0" %? stack_size = ulong_arg(3) %: stack_size = ulong_arg(4) %) } %) clone_flags = long_arg(1) stack_start = pointer_arg(2) %(kernel_v >= "3.8.0" %? parent_tid_uaddr = pointer_arg(4) child_tid_uaddr = pointer_arg(5) %: parent_tid_uaddr = pointer_arg(5) child_tid_uaddr = pointer_arg(6) %) %( arch != "ia64" %? argstr = sprintf("%s, %p, %p, %p", __fork_flags(clone_flags), stack_start, parent_tid_uaddr, child_tid_uaddr) %: if (__nr == %{ /* pure */ __NR_clone %}) argstr = sprintf("%s, %p, %p, %p", __fork_flags(clone_flags), stack_start, parent_tid_uaddr, child_tid_uaddr) else argstr = sprintf("%s, %p, %p, %p, %p", __fork_flags(clone_flags), stack_start, stack_size, parent_tid_uaddr, child_tid_uaddr) %) } probe nd_syscall.clone.return = kprobe.function("_do_fork").return !, kprobe.function("do_fork").return { %( arch != "ia64" %? @__syscall_compat_gate(%{ __NR_clone %}, %{ __NR_compat_clone %}) name = "clone" %: @__syscall_gate2(%{ __NR_clone %}, %{ __NR_clone2 %}) // This is a bit gross. We're depending on @__syscall_gate2() // to set '__nr' for us. If its implementation changes, this will // need to change. if (__nr == %{ /* pure */ __NR_clone %}) name = "clone" else name = "clone2" %) retstr = returnstr(1) } # close ______________________________________________________ # long sys_close(unsigned int fd) probe nd_syscall.close = kprobe.function("sys_close") ? { @__syscall_compat_gate(%{ __NR_close %}, %{ __NR_compat_close %}) name = "close" asmlinkage() fd = int_arg(1) argstr = sprint(fd) } probe nd_syscall.close.return = kprobe.function("sys_close").return ? { @__syscall_compat_gate(%{ __NR_close %}, %{ __NR_compat_close %}) name = "close" retstr = returnstr(1) } # 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(%{ __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) != %{ SYS_CONNECT %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") 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) != %{ SYS_CONNECT %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") 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(%{ __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)) != %{ SYS_CONNECT %}) next; } # creat # long sys_creat(const char __user * pathname, int mode) probe nd_syscall.creat = kprobe.function("sys_creat") ? { name = "creat" asmlinkage() mode = uint_arg(2) pathname = user_string_quoted(pointer_arg(1)) argstr = sprintf("%s, %#o", user_string_quoted(pointer_arg(1)), mode) } probe nd_syscall.creat.return = kprobe.function("sys_creat").return ? { name = "creat" retstr = returnstr(1) } # delete_module ______________________________________________ # long sys_delete_module(const char __user *name_user, unsigned int flags) probe nd_syscall.delete_module = kprobe.function("sys_delete_module") ? { name = "delete_module" asmlinkage() name_user = user_string_quoted(pointer_arg(1)) flags = uint_arg(2) flags_str = _module_flags_str(flags) argstr = sprintf("%s, %s", name_user, _module_flags_str(flags)) } probe nd_syscall.delete_module.return = kprobe.function("sys_delete_module").return ? { name = "delete_module" retstr = returnstr(1) } # dup ________________________________________________________ # long sys_dup(unsigned int fildes) probe nd_syscall.dup = kprobe.function("sys_dup") ? { name = "dup" asmlinkage() # 'old_fd' should have been 'oldfd. Deprecate the old name. %(systemtap_v <= "1.4" %? old_fd = int_arg(1) %) oldfd = int_arg(1) argstr = sprint(oldfd) } probe nd_syscall.dup.return = kprobe.function("sys_dup").return ? { name = "dup" retstr = returnstr(1) } # dup2 _______________________________________________________ # long sys_dup2(unsigned int oldfd, unsigned int newfd) probe nd_syscall.dup2 = kprobe.function("sys_dup2") { name = "dup2" asmlinkage() oldfd = int_arg(1) newfd = int_arg(2) # The dup2 syscall doesn't have a 'flags' argument. But, the # syscall.dup2 and syscall.dup3 probes used to be combined, so # both probes need a 'flags' variable. flags = 0 argstr = sprintf("%d, %d", oldfd, newfd) } probe nd_syscall.dup2.return = kprobe.function("sys_dup2").return { name = "dup2" retstr = returnstr(1) } # dup3 _______________________________________________________ # SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags) probe nd_syscall.dup3 = kprobe.function("sys_dup3") ? { @__syscall_compat_gate(%{ __NR_dup3 %}, %{ __NR_compat_dup3 %}) name = "dup3"; asmlinkage() oldfd = int_arg(1) newfd = int_arg(2) flags = int_arg(3) argstr = sprintf("%d, %d, %s", oldfd, newfd, _dup3_flag_str(flags)); } probe nd_syscall.dup3.return = kprobe.function("sys_dup3").return ? { @__syscall_compat_gate(%{ __NR_dup3 %}, %{ __NR_compat_dup3 %}) name = "dup3" retstr = returnstr(1) } # epoll_create _______________________________________________ # long sys_epoll_create(int size) # SYSCALL_DEFINE1(epoll_create1, int, flags) probe nd_syscall.epoll_create = __nd_syscall.epoll_create1 !, __nd_syscall.epoll_create ? { } probe __nd_syscall.epoll_create1 = kprobe.function("sys_epoll_create1") { asmlinkage() size = 0; flags = int_arg(1) if (flags == 0) { name = "epoll_create"; argstr = sprint(size); } else { name = "epoll_create1"; argstr = _epoll_create1_flag_str(flags); } } probe __nd_syscall.epoll_create = kprobe.function("sys_epoll_create") { name = "epoll_create" asmlinkage() size = int_arg(1) flags = 0 argstr = sprint(size) } probe nd_syscall.epoll_create.return = __nd_syscall.epoll_create1.return !, __nd_syscall.epoll_create.return ? { } probe __nd_syscall.epoll_create1.return = kprobe.function("sys_epoll_create1").return { flags = @entry(__asmlinkage_int_arg(1)) name = (flags == 0) ? "epoll_create" : "epoll_create1"; retstr = returnstr(1) } probe __nd_syscall.epoll_create.return = kprobe.function("sys_epoll_create").return { flags = 0 name = "epoll_create" retstr = returnstr(1) } # epoll_ctl __________________________________________________ # # long sys_epoll_ctl(int epfd, int op, int fd, struct epoll_event __user *event) # long compat_sys_epoll_ctl(int epfd, int op, int fd, # struct compat_epoll_event __user *event) # probe nd_syscall.epoll_ctl = kprobe.function("compat_sys_epoll_ctl") ?, kprobe.function("sys_epoll_ctl") ? { name = "epoll_ctl" asmlinkage() epfd = int_arg(1) op = int_arg(2) op_str = _opoll_op_str(op) fd = int_arg(3) event_uaddr = pointer_arg(4) argstr = sprintf("%d, %s, %d, %p", epfd, op_str, fd, event_uaddr) } probe nd_syscall.epoll_ctl.return = kprobe.function("compat_sys_epoll_ctl").return ?, kprobe.function("sys_epoll_ctl").return ? { name = "epoll_ctl" retstr = returnstr(1) } # epoll_pwait _________________________________________________ # # long sys_epoll_pwait(int epfd, struct epoll_event __user *events, # int maxevents, int timeout, const sigset_t __user *sigmask, # size_t sigsetsize) # long compat_sys_epoll_pwait(int epfd, # struct compat_epoll_event __user *events, # int maxevents, int timeout, # const compat_sigset_t __user *sigmask, # compat_size_t sigsetsize) # probe nd_syscall.epoll_pwait = kprobe.function("compat_sys_epoll_pwait") ?, kprobe.function("sys_epoll_pwait") ? { name = "epoll_pwait" asmlinkage() epfd = int_arg(1) events_uaddr = pointer_arg(2) maxevents = int_arg(3) timeout = int_arg(4) sigmask_uaddr = pointer_arg(5) sigsetsize = ulong_arg(6) argstr = sprintf("%d, %p, %d, %d, %p, %d", epfd, events_uaddr, maxevents, timeout, sigmask_uaddr, sigsetsize) } probe nd_syscall.epoll_pwait.return = kprobe.function("compat_sys_epoll_pwait").return ?, kprobe.function("sys_epoll_pwait").return ? { name = "epoll_pwait" retstr = returnstr(1) } # epoll_wait _________________________________________________ # # long sys_epoll_wait(int epfd, struct epoll_event __user *events, # int maxevents, int timeout) # long compat_sys_epoll_wait(int epfd, # struct compat_epoll_event __user *events, # int maxevents, int timeout) # probe nd_syscall.epoll_wait = kprobe.function("compat_sys_epoll_wait") ?, kprobe.function("sys_epoll_wait") ? { @__syscall_compat_gate(%{ __NR_epoll_wait %}, %{ __NR_compat_epoll_wait %}) name = "epoll_wait" asmlinkage() epfd = int_arg(1) events_uaddr = pointer_arg(2) maxevents = int_arg(3) timeout = int_arg(4) argstr = sprintf("%d, %p, %d, %d", epfd, events_uaddr, maxevents, timeout) } probe nd_syscall.epoll_wait.return = kprobe.function("compat_sys_epoll_wait").return ?, kprobe.function("sys_epoll_wait").return ? { @__syscall_compat_gate(%{ __NR_epoll_wait %}, %{ __NR_compat_epoll_wait %}) name = "epoll_wait" retstr = returnstr(1) } # eventfd _____________________________________________________ # long sys_eventfd(unsigned int count) # SYSCALL_DEFINE2(eventfd2, unsigned int, count, int, flags) probe nd_syscall.eventfd = __nd_syscall.eventfd2 ?, __nd_syscall.eventfd ? { } probe __nd_syscall.eventfd2 = kprobe.function("sys_eventfd2") { @__syscall_compat_gate(%{ __NR_eventfd2 %}, %{ __NR_compat_eventfd2 %}) name = "eventfd2" asmlinkage() count = uint_arg(1) flags = int_arg(2) flags_str = _eventfd2_flag_str(flags) argstr = sprintf("%u, %s", count, flags_str) } probe __nd_syscall.eventfd = kprobe.function("sys_eventfd") { name = "eventfd" asmlinkage() count = uint_arg(1) flags = 0 flags_str = "0x0" argstr = sprint(count) } probe nd_syscall.eventfd.return = __nd_syscall.eventfd2.return ?, __nd_syscall.eventfd.return ? { retstr = returnstr(1) } probe __nd_syscall.eventfd2.return = kprobe.function("sys_eventfd2").return { @__syscall_compat_gate(%{ __NR_eventfd2 %}, %{ __NR_compat_eventfd2 %}) name = "eventfd2" } probe __nd_syscall.eventfd.return = kprobe.function("sys_eventfd").return { name = "eventfd" } # execve _____________________________________________________ %( kernel_v >= "3.7" %? # In kernels >= 3.7, sys_execve() has been moved to generic code, so we # can use it with confidence. For kernels < 3.7, execve support is in # arch-specific tapset code. # # execve _____________________________________________________ # SYSCALL_DEFINE3(execve, # const char __user *, filename, # const char __user *const __user *, argv, # const char __user *const __user *, envp) probe nd_syscall.execve = kprobe.function("sys_execve") { name = "execve" asmlinkage() filename = user_string_quoted(pointer_arg(1)) args = __get_argv(pointer_arg(2), 0) env_str = __count_envp(pointer_arg(3)) argstr = sprintf("%s, %s, %s", filename, args, env_str) } probe nd_syscall.execve.return = kprobe.function("sys_execve").return { name = "execve" retstr = returnstr(1) } # In kernels >= 3.7, compat_sys_execve() has been moved to generic # code, so we can use it with confidence. For kernels < 3.7, # compat_execve support is in arch-specific tapset code. # # asmlinkage long compat_sys_execve(const char __user * filename, # const compat_uptr_t __user * argv, # const compat_uptr_t __user * envp) probe nd_syscall.compat_execve = kprobe.function("compat_sys_execve").call ? { name = "execve" asmlinkage() filename = user_string_quoted(pointer_arg(1)) args = __get_compat_argv(pointer_arg(2), 0) env_str = __count_compat_envp(pointer_arg(3)) argstr = sprintf("%s, %s, %s", filename, args, env_str) } probe nd_syscall.compat_execve.return = kprobe.function("compat_sys_execve").return ? { name = "execve" retstr = returnstr(1) } %) # execveat ______________________________________________ # SYSCALL_DEFINE5(execveat, # int, fd, const char __user *, filename, # const char __user *const __user *, argv, # const char __user *const __user *, envp, # int, flags) # probe nd_syscall.execveat = kprobe.function("sys_execveat").call ? { asmlinkage() name = "execveat" dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) %(systemtap_v <= "2.8" %? # All other "at" syscalls (faccessat, fchmodat, fchownat, # etc.) name their file descriptor argument 'dirfd', so let's # do the same. fd = dirfd fd_str = dirfd_str %) filename = user_string_quoted(pointer_arg(2)) args = __get_argv(pointer_arg(3), 0) env_str = __count_envp(pointer_arg(4)) flags = int_arg(5) flags_str = _at_flag_str(flags) argstr = sprintf("%s, %s, %s, %s, %s", dirfd_str, filename, args, env_str, flags_str) } probe nd_syscall.execveat.return = kprobe.function("sys_execveat").return ? { name = "execveat" retstr = returnstr(1) } probe nd_syscall.compat_execveat = kprobe.function("compat_sys_execveat").call ? { name = "execveat" dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) %(systemtap_v <= "2.8" %? # All other "at" syscalls (faccessat, fchmodat, fchownat, # etc.) name their file descriptor argument 'dirfd', so let's # do the same. fd = dirfd fd_str = dirfd_str %) filename = user_string_quoted(pointer_arg(2)) args = __get_compat_argv(pointer_arg(3), 0) env_str = __count_compat_envp(pointer_arg(4)) flags = int_arg(5) flags_str = _at_flag_str(flags) argstr = sprintf("%s, %s, %s, %s, %s", dirfd_str, filename, args, env_str, flags_str) } probe nd_syscall.compat_execveat.return = kprobe.function("compat_sys_execveat").return ? { name = "execveat" retstr = returnstr(1) } # exit _______________________________________________________ # long sys_exit(int error_code) probe nd_syscall.exit = kprobe.function("sys_exit").call { name = "exit" asmlinkage() status = int_arg(1) argstr = sprint(status) } # sys_exit() never returns, and is blacklisted for return probes, # so no alias here. See bz6588. # NB: the explicit .call ensures that alias suffixes can't infer .return # exit_group _________________________________________________ # void sys_exit_group(int error_code) # probe nd_syscall.exit_group = kprobe.function("sys_exit_group").call ? { name = "exit_group" asmlinkage() status = int_arg(1) argstr = sprint(status) } # sys_exit_group() never returns, and is blacklisted for return probes, # so no alias here. See bz6588. # NB: the explicit .call ensures that alias suffixes can't infer .return # faccessat __________________________________________________ # new function with 2.6.16 # long sys_faccessat(int dfd, const char __user *filename, int mode) probe nd_syscall.faccessat = kprobe.function("sys_faccessat") ? { @__syscall_compat_gate(%{ __NR_faccessat %}, %{ __NR_compat_faccessat %}) name = "faccessat" asmlinkage() dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) pathname = user_string_quoted(pointer_arg(2)) mode = int_arg(3) mode_str = _access_mode_str(mode) argstr = sprintf("%s, %s, %s", dirfd_str, user_string_quoted(pointer_arg(2)), mode_str) } probe nd_syscall.faccessat.return = kprobe.function("sys_faccessat").return ? { @__syscall_compat_gate(%{ __NR_faccessat %}, %{ __NR_compat_faccessat %}) name = "faccessat" retstr = returnstr(1) } # fadvise64 __________________________________________________ # long sys_fadvise64(int fd, loff_t offset, size_t len, int advice) # probe nd_syscall.fadvise64 = kprobe.function("sys_fadvise64") ? { asmlinkage() @__syscall_gate_compat_simple name = "fadvise64" fd = int_arg(1) %( CONFIG_64BIT == "y" %? offset = longlong_arg(2) len = long_arg(3) advice = int_arg(4) %: # On a 32-bit kernel, 'long long' arguments take the space of # 2 arguments, so we have to adjust the following argument # numbers. offset = longlong_arg(2) len = long_arg(4) advice = int_arg(5) %) argstr = sprintf("%d, %d, %d, %s", fd, offset, len, _fadvice_advice_str(advice)) } probe nd_syscall.fadvise64.return = kprobe.function("sys_fadvise64").return ? { @__syscall_gate_compat_simple name = "fadvise64" retstr = returnstr(1) } # fadvise64_64 _______________________________________________ # long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) # probe nd_syscall.fadvise64_64 = kprobe.function("sys_fadvise64_64") ? { asmlinkage() @__syscall_gate_compat_simple %( arch != "s390" && arch != "ia64" && arch != "arm" && arch != "arm64" %? # s390x/ia64/arm/arm64 has sys_fadvise64_64() mapped to # __NR_fadvise64 (instead of __NR_fadvise64_64) @__syscall_gate(%{ __NR_fadvise64_64 %}) %) name = "fadvise64" fd = int_arg(1) %( CONFIG_64BIT == "y" %? offset = longlong_arg(2) len = longlong_arg(3) advice = int_arg(4) %: %( arch == "arm" %? # arm has some odd rules regarding long long arguments. offset = longlong_arg(3) len = longlong_arg(5) advice = int_arg(7) %: # On a 32-bit kernel, 'long long' arguments take the space of # 2 arguments, so we have to adjust the following argument # numbers. offset = longlong_arg(2) len = longlong_arg(4) advice = int_arg(6) %) %) argstr = sprintf("%d, %d, %d, %s", fd, offset, len, _fadvice_advice_str(advice)) } probe nd_syscall.fadvise64_64.return = kprobe.function("sys_fadvise64_64").return ? { @__syscall_gate_compat_simple %( arch != "s390" && arch != "ia64" && arch != "arm" && arch != "arm64" %? @__syscall_gate(%{ __NR_fadvise64_64 %}) %) name = "fadvise64" retstr = returnstr(1) } # fallocate ____________________________________________________ # # SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len) probe nd_syscall.fallocate = kprobe.function("sys_fallocate") ? { asmlinkage() @__syscall_gate_compat_simple name = "fallocate" fd = int_arg(1) mode = uint_arg(2) mode_str = _stp_fallocate_mode_str(mode) %( CONFIG_64BIT == "y" %? offset = longlong_arg(3) len = longlong_arg(4) %: # On a 32-bit kernel, 'long long' arguments take the space of # 2 arguments, so we have to adjust the following argument # numbers. offset = longlong_arg(3) len = longlong_arg(5) %) argstr = sprintf("%d, %s, %#x, %u", fd, _stp_fallocate_mode_str(mode), offset, len) } probe nd_syscall.fallocate.return = kprobe.function("sys_fallocate").return ? { asmlinkage() @__syscall_gate_compat_simple name = "fallocate" retstr = returnstr(1) } # fanotify_init ______________________________________________ # fanotify_init() was enabled in kernel version 2.6.37. # SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, # unsigned int, event_f_flags) probe nd_syscall.fanotify_init = kprobe.function("sys_fanotify_init") ? { name = "fanotify_init" asmlinkage() flags = uint_arg(1) flags_str = _fanotify_init_flags_str(flags) event_f_flags = uint_arg(2) event_f_flags_str = _sys_open_flag_str(event_f_flags) argstr = sprintf("%s, %s", _fanotify_init_flags_str(flags), _sys_open_flag_str(event_f_flags)) } probe nd_syscall.fanotify_init.return = kprobe.function("sys_fanotify_init").return ? { name = "fanotify_init" retstr = returnstr(1) } # fanotify_mark ______________________________________________ # fanotify_mark() was enabled in kernel version 2.6.37. # # SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags, # __u64, mask, int, dfd, # const char __user *, pathname) # COMPAT_SYSCALL_DEFINE6(fanotify_mark, # int, fanotify_fd, unsigned int, flags, # __u32, mask0, __u32, mask1, int, dfd, # const char __user *, pathname) probe nd_syscall.fanotify_mark = __nd_syscall.fanotify_mark ?, __nd_syscall.compat_fanotify_mark ? { name = "fanotify_mark" flags_str = _fanotify_mark_flags_str(flags) mask_str = _fanotify_mark_mask_str(mask) dirfd_str = _dfd_str(dirfd) argstr = sprintf("%d, %s, %s, %s, %s", fanotify_fd, _fanotify_mark_flags_str(flags), _fanotify_mark_mask_str(mask), _dfd_str(dirfd), pathname) } probe __nd_syscall.fanotify_mark = kprobe.function("sys_fanotify_mark") ? { asmlinkage() fanotify_fd = int_arg(1) flags = uint_arg(2) %( CONFIG_64BIT == "y" %? mask = ulonglong_arg(3) dirfd = int_arg(4) pathname = user_string_quoted(pointer_arg(5)) %: # On a 32-bit kernel, 'long long' arguments take the space of # 2 arguments, so we have to adjust the following argument # numbers. mask = ulonglong_arg(3) dirfd = int_arg(5) pathname = user_string_quoted(pointer_arg(6)) %) } probe __nd_syscall.compat_fanotify_mark = kprobe.function("compat_sys_fanotify_mark") ? { asmlinkage() fanotify_fd = int_arg(1) flags = uint_arg(2) if (@__BIG_ENDIAN) mask = ((ulong_arg(3) << 32) | ulong_arg(4)) else mask = ((ulong_arg(4) << 32) | ulong_arg(3)) dirfd = int_arg(5) pathname = user_string_quoted(pointer_arg(6)) } probe nd_syscall.fanotify_mark.return = kprobe.function("sys_fanotify_mark").return ?, kprobe.function("compat_sys_fanotify_mark").return ? { name = "fanotify_mark" retstr = returnstr(1) } # fchdir _____________________________________________________ # long sys_fchdir(unsigned int fd) probe nd_syscall.fchdir = kprobe.function("sys_fchdir") ? { name = "fchdir" asmlinkage() fd = int_arg(1) argstr = sprint(fd) } probe nd_syscall.fchdir.return = kprobe.function("sys_fchdir").return ? { name = "fchdir" retstr = returnstr(1) } # fchmod _____________________________________________________ # long sys_fchmod(unsigned int fd, mode_t mode) probe nd_syscall.fchmod = kprobe.function("sys_fchmod") ? { name = "fchmod" asmlinkage() fildes = int_arg(1) mode = uint_arg(2) argstr = sprintf("%d, %#o", fildes, mode) } probe nd_syscall.fchmod.return = kprobe.function("sys_fchmod").return ? { name = "fchmod" retstr = returnstr(1) } # fchmodat ___________________________________________________ # new function with 2.6.16 # long sys_fchmodat(int dfd, const char __user *filename, # mode_t mode) probe nd_syscall.fchmodat = kprobe.function("sys_fchmodat") ? { @__syscall_compat_gate(%{ __NR_fchmodat %}, %{ __NR_compat_fchmodat %}) name = "fchmodat" asmlinkage() dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) pathname = user_string_quoted(pointer_arg(2)) mode = uint_arg(3) argstr = sprintf("%s, %s, %#o", dirfd_str, user_string_quoted(pointer_arg(2)), mode) } probe nd_syscall.fchmodat.return = kprobe.function("sys_fchmodat").return ? { @__syscall_compat_gate(%{ __NR_fchmodat %}, %{ __NR_compat_fchmodat %}) name = "fchmodat" retstr = returnstr(1) } # fchown _____________________________________________________ # long sys_fchown(unsigned int fd, uid_t user, gid_t group) probe nd_syscall.fchown = kprobe.function("sys_fchown") ? { // Avoid fchown16() calling fchown(). %( arch == "x86_64" %? @__syscall_compat_gate(%{ __NR_fchown %}, %{ __NR_ia32_fchown32 %}) %) %( arch == "i386" %? @__syscall_gate(%{ __NR_fchown32 %}) %) name = "fchown" asmlinkage() fd = int_arg(1) owner = __int32(uint_arg(2)) group = __int32(uint_arg(3)) argstr = sprintf("%d, %d, %d", fd, owner, group) } probe nd_syscall.fchown.return = kprobe.function("sys_fchown").return ? { %( arch == "x86_64" %? @__syscall_compat_gate(%{ __NR_fchown %}, %{ __NR_ia32_fchown32 %}) %) %( arch == "i386" %? @__syscall_gate(%{ __NR_fchown32 %}) %) name = "fchown" retstr = returnstr(1) } # fchown16 ___________________________________________________ # long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) probe nd_syscall.fchown16 = kprobe.function("sys_fchown16") ? { name = "fchown16" asmlinkage() fd = int_arg(1) owner = __short(uint_arg(2)) group = __short(uint_arg(3)) argstr = sprintf("%d, %d, %d", fd, owner, group) } probe nd_syscall.fchown16.return = kprobe.function("sys_fchown16").return ? { name = "fchown16" retstr = returnstr(1) } # 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(%{ __NR_fchownat %}, %{ __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(%{ __NR_fchownat %}, %{ __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) # long compat_sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) # long compat_sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) # probe nd_syscall.fcntl = kprobe.function("compat_sys_fcntl") ?, kprobe.function("compat_sys_fcntl64") ?, kprobe.function("sys_fcntl64") ?, kprobe.function("sys_fcntl") ? { name = "fcntl" asmlinkage() fd = int_arg(1) cmd = int_arg(2) cmd_str = _fcntl_cmd_str(cmd) arg = long_arg(3) argstr = sprintf("%d, %s, %p", fd, cmd_str, arg) } probe nd_syscall.fcntl.return = kprobe.function("compat_sys_fcntl").return ?, kprobe.function("compat_sys_fcntl64").return ?, kprobe.function("sys_fcntl64").return ?, kprobe.function("sys_fcntl").return ? { name = "fcntl" retstr = returnstr(1) } # fdatasync __________________________________________________ # long sys_fdatasync(unsigned int fd) probe nd_syscall.fdatasync = kprobe.function("sys_fdatasync") ? { name = "fdatasync" asmlinkage() fd = int_arg(1) argstr = sprint(fd) } probe nd_syscall.fdatasync.return = kprobe.function("sys_fdatasync").return ? { name = "fdatasync" retstr = returnstr(1) } # fgetxattr __________________________________________________ # ssize_t sys_fgetxattr(int fd, char __user *name, # void __user *value, size_t size) probe nd_syscall.fgetxattr = kprobe.function("sys_fgetxattr") ? { name = "fgetxattr" asmlinkage() filedes = int_arg(1) # 'name2' should have been 'name_str'. Deprecate the old name. %(systemtap_v <= "1.4" %? name2 = user_string_quoted(pointer_arg(2)) %) name_str = user_string_quoted(pointer_arg(2)) value_uaddr = pointer_arg(3) size = ulong_arg(4) argstr = sprintf("%d, %s, %p, %u", filedes, user_string_quoted(pointer_arg(2)), value_uaddr, size) } probe nd_syscall.fgetxattr.return = kprobe.function("sys_fgetxattr").return ? { name = "fgetxattr" retstr = returnstr(1) } # finit_module ________________________________________________ # SYSCALL_DEFINE3(finit_module, int, fd, const char __user *, uargs, # int, flags) # probe nd_syscall.finit_module = kprobe.function("sys_finit_module").call ? { name = "finit_module" asmlinkage() fd = int_arg(1) uargs = user_string_quoted(pointer_arg(2)) flags = int_arg(3) flags_str = _finit_module_flags_str(flags) argstr = sprintf("%d, %s, %s", fd, uargs, _finit_module_flags_str(flags)) } probe nd_syscall.finit_module.return = kprobe.function("sys_finit_module").return ? { name = "finit_module" retstr = returnstr(1) } # flistxattr _________________________________________________ # ssize_t sys_flistxattr(int fd, char __user *list, size_t size) probe nd_syscall.flistxattr = kprobe.function("sys_flistxattr") ? { name = "flistxattr" asmlinkage() filedes = int_arg(1) list_uaddr = pointer_arg(2) size = ulong_arg(3) argstr = sprintf("%d, %p, %u", filedes, list_uaddr, size) } probe nd_syscall.flistxattr.return = kprobe.function("sys_flistxattr").return ? { name = "flistxattr" retstr = returnstr(1) } # flock ______________________________________________________ # long sys_flock(unsigned int fd, unsigned int cmd) probe nd_syscall.flock = kprobe.function("sys_flock") ? { name = "flock" asmlinkage() fd = int_arg(1) operation = int_arg(2) argstr = sprintf("%d, %s", fd, _flock_cmd_str(operation)) } probe nd_syscall.flock.return = kprobe.function("sys_flock").return ? { name = "flock" retstr = returnstr(1) } # fork _______________________________________________________ # # SYSCALL_DEFINE0(fork) # probe nd_syscall.fork = kprobe.function("sys_fork").call ? { %(systemtap_v < "2.3" %? regs = 0 %) %(systemtap_v < "2.5" %? clone_flags = 0 stack_start = 0 stack_size = 0 parent_tid_uaddr = 0 child_tid_uaddr = 0 %) name = "fork" argstr = "" } probe nd_syscall.fork.return = kprobe.function("sys_fork").return ? { name = "fork" retstr = returnstr(1) } # fremovexattr _______________________________________________ # long sys_fremovexattr(int fd, char __user *name) probe nd_syscall.fremovexattr = kprobe.function("sys_fremovexattr") ? { name = "fremovexattr" asmlinkage() filedes = int_arg(1) # 'name2' should have been 'name_str'. Deprecate the old name. %(systemtap_v <= "1.4" %? name2 = user_string_quoted(pointer_arg(2)) %) name_uaddr = pointer_arg(2) name_str = user_string_quoted(pointer_arg(2)) argstr = sprintf("%d, %s", filedes, user_string_quoted(pointer_arg(2))) } probe nd_syscall.fremovexattr.return = kprobe.function("sys_fremovexattr").return ? { name = "fremovexattr" retstr = returnstr(1) } # fsetxattr __________________________________________________ /* * asmlinkage long * sys_fsetxattr(int fd, * char __user *name, * void __user *value, * size_t size, * int flags) */ probe nd_syscall.fsetxattr = kprobe.function("sys_fsetxattr") ? { name = "fsetxattr" asmlinkage() filedes = int_arg(1) # 'name2' should have been 'name_str'. Deprecate the old name. %(systemtap_v <= "1.4" %? name2 = user_string_quoted(pointer_arg(2)) %) name_uaddr = pointer_arg(2) name_str = user_string_quoted(pointer_arg(2)) value_uaddr = pointer_arg(3) size = ulong_arg(4) value_str = _stp_xattr_val_str(value_uaddr, size) flags = int_arg(5) flags_str = _stp_xattr_flags_str(flags) argstr = sprintf("%d, %s, %s, %u, %s", filedes, user_string_quoted(pointer_arg(2)), _stp_xattr_val_str(value_uaddr, size), size, _stp_xattr_flags_str(flags)) } probe nd_syscall.fsetxattr.return = kprobe.function("sys_fsetxattr").return ? { name = "fsetxattr" retstr = returnstr(1) } # fstat ______________________________________________________ # long sys_fstat(unsigned int fd, struct __old_kernel_stat __user * statbuf) # long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf) # long sys32_fstat64(unsigned int fd, struct stat64 __user *statbuf) # long sys_newfstat(unsigned int fd, struct stat __user * statbuf) # long sys_oabi_fstat64(char __user * filename, # struct oldabi_stat64 __user * statbuf) # long compat_sys_newfstat(unsigned int fd, struct compat_stat __user * statbuf) # probe nd_syscall.fstat = kprobe.function("sys_fstat") ?, kprobe.function("sys_fstat64") ?, kprobe.function("sys32_fstat64") ?, kprobe.function("sys_newfstat") ?, kprobe.function("sys_oabi_fstat64") ?, kprobe.function("compat_sys_newfstat") ? { name = "fstat" asmlinkage() filedes = int_arg(1) buf_uaddr = pointer_arg(2) argstr = sprintf("%d, %p", filedes, buf_uaddr) } probe nd_syscall.fstat.return = kprobe.function("sys_fstat").return ?, kprobe.function("sys_fstat64").return ?, kprobe.function("sys32_fstat64").return ?, kprobe.function("sys_newfstat").return ?, kprobe.function("sys_oabi_fstat64").return ?, kprobe.function("compat_sys_newfstat").return ? { name = "fstat" retstr = returnstr(1) } # fstatat ____________________________________________________ # sys32_fstatat64(unsigned int dfd, char __user *filename, struct stat64_emu31 __user* statbuf, int flag) # long sys_newfstatat(int dfd, char __user *filename, struct stat __user *statbuf, int flag) # long sys_fstatat64(int dfd, char __user *filename, struct stat64 __user *statbuf, int flag) # long compat_sys_newfstatat(unsigned int dfd, char __user *filename, struct compat_stat __user *statbuf, int flag) probe nd_syscall.fstatat = kprobe.function("sys_fstatat64") ?, kprobe.function("sys_newfstatat") ?, kprobe.function("compat_sys_newfstatat") ?, kprobe.function("sys32_fstatat64") ?, kprobe.function("sys32_fstatat") ? { name = "fstatat" asmlinkage() dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) path = user_string_quoted(pointer_arg(2)) buf_uaddr = pointer_arg(3) flags = int_arg(4) flags_str = _at_flag_str(flags) argstr = sprintf("%s, %s, %p, %s", dirfd_str, path, buf_uaddr, flags_str) } probe nd_syscall.fstatat.return = kprobe.function("sys_fstatat64").return ?, kprobe.function("sys_newfstatat").return ?, kprobe.function("compat_sys_newfstatat").return ?, kprobe.function("sys32_fstatat64").return ?, kprobe.function("sys32_fstatat").return ? { name = "fstatat" retstr = returnstr(1) } # fstatfs ____________________________________________________ # long sys_fstatfs(unsigned int fd, struct statfs __user * buf) # long compat_sys_fstatfs(unsigned int fd, struct compat_statfs __user *buf) # probe nd_syscall.fstatfs = kprobe.function("compat_sys_fstatfs") ?, kprobe.function("sys_fstatfs") ? { name = "fstatfs" asmlinkage() fd = int_arg(1) buf_uaddr = pointer_arg(2) argstr = sprintf("%d, %p", fd, buf_uaddr) } probe nd_syscall.fstatfs.return = kprobe.function("compat_sys_fstatfs").return ?, kprobe.function("sys_fstatfs").return ? { name = "fstatfs" retstr = returnstr(1) } # fstatfs64 __________________________________________________ # long sys_fstatfs64(unsigned int fd, size_t sz, struct statfs64 __user *buf) # long compat_sys_fstatfs64(unsigned int fd, compat_size_t sz, struct compat_statfs64 __user *buf) # probe nd_syscall.fstatfs64 = kprobe.function("sys_fstatfs64") ?, kprobe.function("compat_sys_fstatfs64") ? { name = "fstatfs64" asmlinkage() fd = int_arg(1) sz = ulong_arg(2) buf_uaddr = pointer_arg(3) argstr = sprintf("%d, %u, %p", fd, sz, buf_uaddr) } probe nd_syscall.fstatfs64.return = kprobe.function("sys_fstatfs64").return ?, kprobe.function("compat_sys_fstatfs64").return ? { name = "fstatfs64" retstr = returnstr(1) } # fsync ______________________________________________________ # long sys_fsync(unsigned int fd) probe nd_syscall.fsync = kprobe.function("sys_fsync") ? { name = "fsync" asmlinkage() fd = int_arg(1) argstr = sprint(fd) } probe nd_syscall.fsync.return = kprobe.function("sys_fsync").return ? { name = "fsync" retstr = returnstr(1) } # ftruncate __________________________________________________ # long sys_ftruncate(unsigned int fd, unsigned long length) # COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) # probe nd_syscall.ftruncate = __nd_syscall.ftruncate, kprobe.function("compat_sys_ftruncate").call? { name = "ftruncate" asmlinkage() fd = int_arg(1) length = long_arg(2) argstr = sprintf("%d, %d", fd, length) } probe __nd_syscall.ftruncate = kprobe.function("sys_ftruncate").call { @__syscall_compat_gate(%{ __NR_ftruncate %}, %{ __NR_compat_ftruncate %}) } probe nd_syscall.ftruncate.return = __nd_syscall.ftruncate.return, kprobe.function("compat_sys_ftruncate").return ? { name = "ftruncate" retstr = returnstr(1) } probe __nd_syscall.ftruncate.return = kprobe.function("sys_ftruncate").return { @__syscall_compat_gate(%{ __NR_ftruncate %}, %{ __NR_compat_ftruncate %}) } # ftruncate64 ________________________________________________ # long sys_ftruncate64(unsigned int fd, loff_t length) probe nd_syscall.ftruncate64 = kprobe.function("sys_ftruncate64") ? { name = "ftruncate" asmlinkage() fd = int_arg(1) length = longlong_arg(2) argstr = sprintf("%d, %d", fd, length) } probe nd_syscall.ftruncate64.return = kprobe.function("sys_ftruncate64").return ? { name = "ftruncate" retstr = returnstr(1) } # futex ______________________________________________________ # long sys_futex(u32 __user *uaddr, # int op, # int val, # struct timespec __user *utime, # u32 __user *uaddr2, # int val3) # long compat_sys_futex(u32 __user *uaddr, int op, u32 val, # struct compat_timespec __user *utime, u32 __user *uaddr2, # u32 val3) # probe nd_syscall.futex = kprobe.function("sys_futex") ? { name = "futex" asmlinkage() futex_uaddr = pointer_arg(1) op = int_arg(2) val = int_arg(3) utime_uaddr = pointer_arg(4) uaddr2_uaddr = pointer_arg(5) val3 = int_arg(6) @__futex_argstr(futex_uaddr, op, val, utime_uaddr, uaddr2_uaddr, val3) } probe nd_syscall.futex.return = kprobe.function("sys_futex").return ? { name = "futex" retstr = returnstr(1) } probe nd_syscall.compat_futex = kprobe.function("compat_sys_futex") ? { name = "futex" asmlinkage() futex_uaddr = pointer_arg(1) op = int_arg(2) val = int_arg(3) utime_uaddr = pointer_arg(4) uaddr2_uaddr = pointer_arg(5) val3 = int_arg(6) @__futex_argstr(futex_uaddr, op, val, utime_uaddr, uaddr2_uaddr, val3) } probe nd_syscall.compat_futex.return = kprobe.function("compat_sys_futex").return ? { name = "futex" retstr = returnstr(1) } # futimesat _____________________________________________________ # # long sys_futimesat(int dfd, char __user *filename, struct timeval __user *utimes) # long compat_sys_futimesat(unsigned int dfd, char __user *filename, struct compat_timeval __user *t) # probe nd_syscall.futimesat = kprobe.function("sys_futimesat") ? { asmlinkage() @__syscall_gate(%{ __NR_futimesat %}) name = "futimesat" dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) filename_uaddr = pointer_arg(2) filename = user_string_quoted(filename_uaddr) tvp_uaddr = pointer_arg(3) argstr = sprintf("%s, %s, %s", _dfd_str(dirfd), user_string_quoted(filename_uaddr), _struct_timeval_u(tvp_uaddr, 2)) } probe nd_syscall.compat_futimesat = kprobe.function("compat_sys_futimesat") ? { asmlinkage() @__compat_syscall_gate(%{ __NR_compat_futimesat %}) name = "futimesat" dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) filename_uaddr = pointer_arg(2) filename = user_string_quoted(pointer_arg(2)) tvp_uaddr = pointer_arg(3) argstr = sprintf("%s, %s, %s", _dfd_str(int_arg(1)), user_string_quoted(pointer_arg(2)), _struct_compat_timeval_u(pointer_arg(3), 2)) } probe nd_syscall.futimesat.return = kprobe.function("sys_futimesat").return ? { @__syscall_gate(%{ __NR_futimesat %}) name = "futimesat" retstr = returnstr(1) } probe nd_syscall.compat_futimesat.return = kprobe.function("compat_sys_futimesat").return ? { @__compat_syscall_gate(%{ __NR_compat_futimesat %}) name = "futimesat" retstr = returnstr(1) } # getcpu _____________________________________________________ # getcpu() was added in kernel 2.6.19 for x86_64 and i386. # Note that the 'tcache' argument is unused since Linux 2.6.24. # # SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep, # struct getcpu_cache __user *, unused) probe nd_syscall.getcpu = kprobe.function("sys_getcpu") ? { name = "getcpu" asmlinkage() cpu_uaddr = pointer_arg(1) node_uaddr = pointer_arg(2) tcache_uaddr = pointer_arg(3) argstr = sprintf("%p, %p, %p", cpu_uaddr, node_uaddr, tcache_uaddr) } probe nd_syscall.getcpu.return = kprobe.function("sys_getcpu").return ? { name = "getcpu" retstr = returnstr(1) } # getcwd _____________________________________________________ # long sys_getcwd(char __user *buf, unsigned long size) probe nd_syscall.getcwd = kprobe.function("sys_getcwd") ? { name = "getcwd" asmlinkage() buf_uaddr = pointer_arg(1) size = ulong_arg(2) argstr = sprintf("%p, %d", buf_uaddr, size) } probe nd_syscall.getcwd.return = kprobe.function("sys_getcwd").return ? { name = "getcwd" retstr = returnstr(1) } # getdents ___________________________________________________ # long sys_getdents(unsigned int fd, struct linux_dirent __user * dirent, unsigned int count) # long compat_sys_getdents(unsigned int fd, struct compat_linux_dirent __user *dirent, unsigned int count) # long sys_getdents64(unsigned int fd, struct linux_dirent64 __user * dirent, unsigned int count) # long compat_sys_getdents64(unsigned int fd, struct linux_dirent64 __user * dirent, unsigned int count) # probe nd_syscall.getdents = kprobe.function("sys_getdents") ?, kprobe.function("sys_getdents64") ?, kprobe.function("compat_sys_getdents") ?, kprobe.function("compat_sys_getdents64") ? { name = "getdents" asmlinkage() fd = int_arg(1) dirp_uaddr = pointer_arg(2) count = uint_arg(3) argstr = sprintf("%d, %p, %d", fd, dirp_uaddr, count) } probe nd_syscall.getdents.return = kprobe.function("sys_getdents").return ?, kprobe.function("sys_getdents64").return ?, kprobe.function("compat_sys_getdents").return ?, kprobe.function("compat_sys_getdents64").return ? { name = "getdents" retstr = returnstr(1) } # getegid ____________________________________________________ # long sys_getegid(void) # long sys_getegid16(void) # long sys32_getegid16(void) # probe nd_syscall.getegid = kprobe.function("sys_getegid16") ?, kprobe.function("sys32_getegid16") ?, kprobe.function("sys_getegid") { name = "getegid" argstr = "" } probe nd_syscall.getegid.return = kprobe.function("sys_getegid16").return ?, kprobe.function("sys32_getegid16").return ?, kprobe.function("sys_getegid").return { name = "getegid" retstr = returnstr(1) } # geteuid ____________________________________________________ # long sys_geteuid(void) # long sys32_geteuid16(void) # probe nd_syscall.geteuid = kprobe.function("sys_geteuid16") ?, kprobe.function("sys32_geteuid16") ?, kprobe.function("sys_geteuid") { name = "geteuid" argstr = "" } probe nd_syscall.geteuid.return = kprobe.function("sys_geteuid16").return ?, kprobe.function("sys32_geteuid16").return ?, kprobe.function("sys_geteuid").return { name = "geteuid" retstr = returnstr(1) } # getgid _____________________________________________________ # long sys_getgid(void) # long sys32_getgid16(void) # probe nd_syscall.getgid = kprobe.function("sys_getgid16") ?, kprobe.function("sys32_getgid16") ?, kprobe.function("sys_getgid") { name = "getgid" argstr = "" } probe nd_syscall.getgid.return = kprobe.function("sys_getgid16").return ?, kprobe.function("sys32_getgid16").return ?, kprobe.function("sys_getgid").return { name = "getgid" retstr = returnstr(1) } # getgroups __________________________________________________ # long sys_getgroups(int gidsetsize, gid_t __user *grouplist) # long sys_getgroups16(int gidsetsize, old_gid_t __user *grouplist) # long sys32_getgroups16(int gidsetsize, u16 __user *grouplist) # probe nd_syscall.getgroups = kprobe.function("sys_getgroups16") ?, kprobe.function("sys32_getgroups16") ?, kprobe.function("sys_getgroups") ? { name = "getgroups" asmlinkage() size = int_arg(1) list_uaddr = pointer_arg(2) argstr = sprintf("%d, %p", size, list_uaddr) } probe nd_syscall.getgroups.return = kprobe.function("sys_getgroups16").return ?, kprobe.function("sys32_getgroups16").return ?, kprobe.function("sys_getgroups").return ? { name = "getgroups" retstr = returnstr(1) } # gethostname ________________________________________________ # long sys_gethostname(char __user *name, int len) probe nd_syscall.gethostname = kprobe.function("sys_gethostname") ? { name = "gethostname" asmlinkage() name_uaddr = pointer_arg(1) len = int_arg(2) argstr = sprintf ("%p, %d", name_uaddr, len) } probe nd_syscall.gethostname.return = kprobe.function("sys_gethostname").return ? { name = "gethostname" retstr = returnstr(1) } # getitimer __________________________________________________ # sys_getitimer(int which, struct itimerval __user *value) # probe nd_syscall.getitimer = kprobe.function("sys_getitimer") ? { name = "getitimer" asmlinkage() which = int_arg(1) value_uaddr = pointer_arg(2) argstr = sprintf("%s, %p", _itimer_which_str(which), value_uaddr) } probe nd_syscall.getitimer.return = kprobe.function("sys_getitimer").return ? { name = "getitimer" retstr = returnstr(1) } # long compat_sys_getitimer(int which, struct compat_itimerval __user *it probe nd_syscall.compat_getitimer = kprobe.function("compat_sys_getitimer") ? { name = "getitimer" asmlinkage() which = int_arg(1) value_uaddr = pointer_arg(2) argstr = sprintf("%s, %p", _itimer_which_str(which), value_uaddr) } probe nd_syscall.compat_getitimer.return = kprobe.function("compat_sys_getitimer").return ? { name = "getitimer" retstr = returnstr(1) } # get_mempolicy ______________________________________________ # long sys_get_mempolicy(int __user *policy, # unsigned long __user *nmask, # unsigned long maxnode, # unsigned long addr, # unsigned long flags) # long compat_sys_get_mempolicy(int __user *policy, # compat_ulong_t __user *nmask, # compat_ulong_t maxnode, # compat_ulong_t addr, compat_ulong_t flags) # probe nd_syscall.get_mempolicy = __nd_syscall.get_mempolicy ?, kprobe.function("compat_sys_get_mempolicy") ? { name = "get_mempolicy" asmlinkage() policy_uaddr = pointer_arg(1) nmask_uaddr = pointer_arg(2) maxnode = ulong_arg(3) addr = ulong_arg(4) flags = ulong_arg(5) flags_str = _mempolicy_flags_str(flags) argstr = sprintf("%p, %p, %u, %p, %s", policy_uaddr, nmask_uaddr, maxnode, addr, _mempolicy_flags_str(flags)) } probe __nd_syscall.get_mempolicy = kprobe.function("sys_get_mempolicy") ? { asmlinkage() @__syscall_gate_compat_simple } probe nd_syscall.get_mempolicy.return = __nd_syscall.get_mempolicy.return ?, kprobe.function("compat_sys_get_mempolicy").return ? { name = "get_mempolicy" retstr = returnstr(1) } probe __nd_syscall.get_mempolicy.return = kprobe.function("sys_get_mempolicy").return ? { asmlinkage() @__syscall_gate_compat_simple } # getpeername ________________________________________________ # long sys_getpeername(int fd, struct sockaddr __user *usockaddr, # int __user *usockaddr_len) # probe nd_syscall.getpeername = __nd_syscall.getpeername ?, __nd_syscall.socketcall.getpeername ?, __nd_syscall.compat_socketcall.getpeername ? { name = "getpeername" argstr = sprintf("%d, %p, %p", s, name_uaddr, namelen_uaddr) } probe __nd_syscall.getpeername = kprobe.function("sys_getpeername") ? { @__syscall_gate(%{ __NR_getpeername %}) asmlinkage() s = int_arg(1) name_uaddr = pointer_arg(2) namelen_uaddr = pointer_arg(3) } probe __nd_syscall.socketcall.getpeername = kprobe.function("sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_GETPEERNAME %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") s = __int32(user_ulong(&(__args)[0])) name_uaddr = user_ulong(&(__args)[1]) namelen_uaddr = user_ulong(&(__args)[2]) } probe __nd_syscall.compat_socketcall.getpeername = kprobe.function("compat_sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_GETPEERNAME %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") s = user_int(&(__args)[0]) name_uaddr = user_uint32(&(__args)[1]) namelen_uaddr = user_uint32(&(__args)[2]) } probe nd_syscall.getpeername.return = __nd_syscall.getpeername.return ?, __nd_syscall.socketcall.getpeername.return ? { name = "getpeername" retstr = returnstr(1) } probe __nd_syscall.getpeername.return = kprobe.function("sys_getpeername").return ? { @__syscall_gate(%{ __NR_getpeername %}) } probe __nd_syscall.socketcall.getpeername.return = kprobe.function("sys_socketcall").return ?, kprobe.function("compat_sys_socketcall").return ? { if (@entry(__asmlinkage_int_arg(1)) != %{ SYS_GETPEERNAME %}) next; } # getpgid ____________________________________________________ # long sys_getpgid(pid_t pid) probe nd_syscall.getpgid = kprobe.function("sys_getpgid") ? { @__syscall_compat_gate(%{ __NR_getpgid %}, %{ __NR_compat_getpgid %}) name = "getpgid" asmlinkage() pid = int_arg(1) argstr = sprintf("%d", pid) } probe nd_syscall.getpgid.return = kprobe.function("sys_getpgid").return ? { @__syscall_compat_gate(%{ __NR_getpgid %}, %{ __NR_compat_getpgid %}) name = "getpgid" retstr = returnstr(1) } # getpgrp ____________________________________________________ # long sys_getpgrp(void) probe nd_syscall.getpgrp = kprobe.function("sys_getpgrp") ? { name = "getpgrp" argstr = "" } probe nd_syscall.getpgrp.return = kprobe.function("sys_getpgrp").return ? { name = "getpgrp" retstr = returnstr(1) } # getpid _____________________________________________________ # long sys_getpid(void) probe nd_syscall.getpid = kprobe.function("sys_getpid") { name = "getpid" argstr = "" } probe nd_syscall.getpid.return = kprobe.function("sys_getpid").return { name = "getpid" retstr = returnstr(1) } # getppid ____________________________________________________ # long sys_getppid(void) probe nd_syscall.getppid = kprobe.function("sys_getppid") { name = "getppid" argstr = "" } probe nd_syscall.getppid.return = kprobe.function("sys_getppid").return { name = "getppid" retstr = returnstr(1) } # getpriority ________________________________________________ # long sys_getpriority(int which, int who) probe nd_syscall.getpriority = kprobe.function("sys_getpriority") ? { name = "getpriority" asmlinkage() which = int_arg(1) who = int_arg(2) argstr = sprintf("%s, %d", _priority_which_str(which), who) } probe nd_syscall.getpriority.return = kprobe.function("sys_getpriority").return ? { name = "getpriority" retstr = returnstr(1) } # getrandom __________________________________________________ # long sys_getrandom(char __user *buf, size_t count, unsigned int flags) probe nd_syscall.getrandom = kprobe.function("sys_getrandom") ? { name = "getrandom" asmlinkage() buf = user_string_quoted(pointer_arg(1)) count = ulong_arg(2) flags = uint_arg(3) flags_str = _getrandom_flags_str(uint_arg(3)) argstr = sprintf("%s, %u, %s", buf, count, flags_str) } probe nd_syscall.getrandom.return = kprobe.function("sys_getrandom").return ? { name = "getrandom" retstr = returnstr(1) } # getresgid __________________________________________________ # long sys_getresgid(gid_t __user *rgid, # gid_t __user *egid, # gid_t __user *sgid) # long sys_getresgid16(old_uid_t __user *rgid, # old_uid_t __user *egid, # old_uid_t __user *sgid) probe nd_syscall.getresgid = kprobe.function("sys_getresgid16") ?, kprobe.function("sys_getresgid") ? { name = "getresgid" asmlinkage() rgid_uaddr = pointer_arg(1) egid_uaddr = pointer_arg(2) sgid_uaddr = pointer_arg(3) argstr = sprintf("%p, %p, %p", rgid_uaddr, egid_uaddr, sgid_uaddr) } probe nd_syscall.getresgid.return = kprobe.function("sys_getresgid16").return ?, kprobe.function("sys_getresgid").return ? { name = "getresgid" retstr = returnstr(1) } # getresuid __________________________________________________ # long sys_getresuid(uid_t __user *ruid, # uid_t __user *euid, # uid_t __user *suid) probe nd_syscall.getresuid = kprobe.function("sys_getresuid16") ?, kprobe.function("sys_getresuid") ? { name = "getresuid" asmlinkage() ruid_uaddr = pointer_arg(1) euid_uaddr = pointer_arg(2) suid_uaddr = pointer_arg(3) argstr = sprintf("%p, %p, %p", ruid_uaddr, euid_uaddr, suid_uaddr) } probe nd_syscall.getresuid.return = kprobe.function("sys_getresuid16").return ?, kprobe.function("sys_getresuid").return ? { name = "getresuid" retstr = returnstr(1) } # getrlimit __________________________________________________ # long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim) # long sys_old_getrlimit(unsigned int resource, struct rlimit __user *rlim) # long compat_sys_getrlimit (unsigned int resource, struct compat_rlimit __user *rlim) probe nd_syscall.getrlimit = __nd_syscall.getrlimit ?, kprobe.function("compat_sys_getrlimit") ?, kprobe.function("sys_old_getrlimit") ? { name = "getrlimit" asmlinkage() resource = int_arg(1) rlim_uaddr = pointer_arg(2) argstr = sprintf("%s, %p", _rlimit_resource_str(resource), rlim_uaddr) } probe __nd_syscall.getrlimit = kprobe.function("sys_getrlimit") { @__syscall_gate_compat_simple } probe nd_syscall.getrlimit.return = __nd_syscall.getrlimit.return ?, kprobe.function("sys_old_getrlimit").return ?, kprobe.function("compat_sys_getrlimit").return ?, __nd_syscall.old_getrlimit.return ? { name = "getrlimit" retstr = returnstr(1) } probe __nd_syscall.getrlimit.return = kprobe.function("sys_getrlimit").return { @__syscall_gate_compat_simple } # get_robust_list ____________________________________________ # SYSCALL_DEFINE3(get_robust_list, int, pid, # struct robust_list_head __user * __user *, head_ptr, # size_t __user *, len_ptr) # COMPAT_SYSCALL_DEFINE3(get_robust_list, int, pid, # compat_uptr_t __user *, head_ptr, # compat_size_t __user *, len_ptr) probe nd_syscall.get_robust_list = __nd_syscall.get_robust_list ?, kprobe.function("compat_sys_get_robust_list") ? { name = "get_robust_list" asmlinkage() pid = int_arg(1) list_head_uaddr = pointer_arg(2) len_uaddr = pointer_arg(3) argstr = sprintf("%d, %p, %p", pid, list_head_uaddr, len_uaddr) } probe __nd_syscall.get_robust_list = kprobe.function("sys_get_robust_list") { @__syscall_gate_compat_simple } probe nd_syscall.get_robust_list.return = __nd_syscall.get_robust_list.return ?, kprobe.function("compat_sys_get_robust_list").return ? { name = "get_robust_list" retstr = returnstr(1) } probe __nd_syscall.get_robust_list.return = kprobe.function("sys_get_robust_list").return { @__syscall_gate_compat_simple } # getrusage __________________________________________________ # long sys_getrusage(int who, struct rusage __user *ru) # COMPAT_SYSCALL_DEFINE2(getrusage, int, who, struct compat_rusage __user *, # ru) # probe nd_syscall.getrusage = __nd_syscall.getrusage, kprobe.function("compat_sys_getrusage").call ? { name = "getrusage" asmlinkage() who = int_arg(1) who_str = _rusage_who_str(who) usage_uaddr = pointer_arg(2) argstr = sprintf("%s, %p", who_str, usage_uaddr) } probe __nd_syscall.getrusage = kprobe.function("sys_getrusage").call { @__syscall_gate(%{ __NR_getrusage %}) } probe nd_syscall.getrusage.return = __nd_syscall.getrusage.return, kprobe.function("compat_sys_getrusage").return ? { name = "getrusage" retstr = returnstr(1) } probe __nd_syscall.getrusage.return = kprobe.function("sys_getrusage").return { @__syscall_gate(%{ __NR_getrusage %}) } # getsid _____________________________________________________ # long sys_getsid(pid_t pid) probe nd_syscall.getsid = kprobe.function("sys_getsid") ? { name = "getsid" asmlinkage() pid = int_arg(1) argstr = sprint(pid) } probe nd_syscall.getsid.return = kprobe.function("sys_getsid").return ? { name = "getsid" retstr = returnstr(1) } # getsockname ________________________________________________ # long sys_getsockname(int fd, # struct sockaddr __user *usockaddr, # int __user *usockaddr_len) probe nd_syscall.getsockname = __nd_syscall.getsockname ?, __nd_syscall.socketcall.getsockname ?, __nd_syscall.compat_socketcall.getsockname ? { name = "getsockname" argstr = sprintf("%d, %p, %p", s, name_uaddr, namelen_uaddr) } probe __nd_syscall.getsockname = kprobe.function("sys_getsockname") ? { @__syscall_gate(%{ __NR_getsockname %}) asmlinkage() s = int_arg(1) name_uaddr = pointer_arg(2) namelen_uaddr = pointer_arg(3) } probe __nd_syscall.socketcall.getsockname = kprobe.function("sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_GETSOCKNAME %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") s = __int32(user_ulong(&(__args)[0])) name_uaddr = user_ulong(&(__args)[1]) namelen_uaddr = user_ulong(&(__args)[2]) } probe __nd_syscall.compat_socketcall.getsockname = kprobe.function("compat_sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_GETSOCKNAME %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") s = user_int(&(__args)[0]) name_uaddr = user_uint32(&(__args)[1]) namelen_uaddr = user_uint32(&(__args)[2]) } probe nd_syscall.getsockname.return = __nd_syscall.getsockname.return ?, __nd_syscall.socketcall.getsockname.return ? { name = "getsockname" retstr = returnstr(1) } probe __nd_syscall.getsockname.return = kprobe.function("sys_getsockname").return ? { @__syscall_gate(%{ __NR_getsockname %}) } probe __nd_syscall.socketcall.getsockname.return = kprobe.function("sys_socketcall").return ?, kprobe.function("compat_sys_socketcall").return ? { if (@entry(__asmlinkage_int_arg(1)) != %{ SYS_GETSOCKNAME %}) next; } # getsockopt _________________________________________________ # long sys_getsockopt(int fd, # int level, # int optname, # char __user *optval, # int __user *optlen) # probe nd_syscall.getsockopt = __nd_syscall.getsockopt ?, __nd_syscall.socketcall.getsockopt ?, __nd_syscall.compat_socketcall.getsockopt ? { name = "getsockopt" level_str = _sockopt_level_str(level) optname_str = _sockopt_optname_str(optname) argstr = sprintf("%d, %s, %s, %p, %p", fd, _sockopt_level_str(level), _sockopt_optname_str(optname), optval_uaddr, optlen_uaddr) } probe __nd_syscall.getsockopt = kprobe.function("sys_getsockopt") ? { asmlinkage() @__syscall_gate(%{ __NR_getsockopt %}) fd = int_arg(1) level = int_arg(2) optname = int_arg(3) optval_uaddr = pointer_arg(4) optlen_uaddr = pointer_arg(5) } probe __nd_syscall.socketcall.getsockopt = kprobe.function("sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_GETSOCKOPT %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") fd = __int32(user_ulong(&(__args)[0])) level = __int32(user_ulong(&(__args)[1])) optname = __int32(user_ulong(&(__args)[2])) optval_uaddr = user_ulong(&(__args)[3]) optlen_uaddr = user_ulong(&(__args)[4]) } probe __nd_syscall.compat_socketcall.getsockopt = kprobe.function("compat_sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_GETSOCKOPT %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") fd = user_int(&(__args)[0]) level = user_int(&(__args)[1]) optname = user_int(&(__args)[2]) optval_uaddr = user_uint32(&(__args)[3]) optlen_uaddr = user_uint32(&(__args)[4]) } probe nd_syscall.getsockopt.return = __nd_syscall.getsockopt.return ?, __nd_syscall.socketcall.getsockopt.return ? { name = "getsockopt" retstr = returnstr(1) } probe __nd_syscall.getsockopt.return = kprobe.function("sys_getsockopt").return ? { @__syscall_gate(%{ __NR_getsockopt %}) } probe __nd_syscall.socketcall.getsockopt.return = kprobe.function("sys_socketcall").return ?, kprobe.function("compat_sys_socketcall").return ? { if (@entry(__asmlinkage_int_arg(1)) != %{ SYS_GETSOCKOPT %}) next; } # gettid _____________________________________________________ # long sys_gettid(void) probe nd_syscall.gettid = kprobe.function("sys_gettid") { name = "gettid" argstr = "" } probe nd_syscall.gettid.return = kprobe.function("sys_gettid").return { name = "gettid" retstr = returnstr(1) } # gettimeofday _______________________________________________ # long sys_gettimeofday(struct timeval __user *tv, # struct timezone __user *tz) # long sys32_gettimeofday(struct compat_timeval __user *tv, # struct timezone __user *tz) # long compat_sys_gettimeofday(struct compat_timeval __user *tv, # struct timezone __user *tz) probe nd_syscall.gettimeofday = kprobe.function("compat_sys_gettimeofday") ?, kprobe.function("sys32_gettimeofday") ?, kprobe.function("sys_gettimeofday") ? { name = "gettimeofday" asmlinkage() tv_uaddr = pointer_arg(1) tz_uaddr = pointer_arg(2) argstr = sprintf("%p, %p", tv_uaddr, tz_uaddr) } probe nd_syscall.gettimeofday.return = kprobe.function("compat_sys_gettimeofday").return ?, kprobe.function("sys32_gettimeofday").return ?, kprobe.function("sys_gettimeofday").return ? { name = "gettimeofday" retstr = returnstr(1) } # getuid _____________________________________________________ # long sys_getuid(void # long sys_getuid16(void) # long sys32_getuid16(void) # probe nd_syscall.getuid = kprobe.function("sys_getuid16") ?, kprobe.function("sys32_getuid16") ?, kprobe.function("sys_getuid") { name = "getuid" argstr = "" } probe nd_syscall.getuid.return = kprobe.function("sys_getuid16").return ?, kprobe.function("sys32_getuid16").return ?, kprobe.function("sys_getuid").return { name = "getuid" retstr = returnstr(1) } # getxattr ___________________________________________________ # ssize_t sys_getxattr(char __user *path, char __user *name, # void __user *value, size_t size) probe nd_syscall.getxattr = kprobe.function("sys_getxattr") ? { name = "getxattr" asmlinkage() path = user_string_quoted(pointer_arg(1)) # 'name2' should have been 'name_str'. Deprecate the old name. %(systemtap_v <= "1.4" %? name2 = user_string_quoted(pointer_arg(2)) %) name_str = user_string_quoted(pointer_arg(2)) value_uaddr = pointer_arg(3) size = ulong_arg(4) argstr = sprintf("%s, %s, %p, %u", user_string_quoted(pointer_arg(1)), user_string_quoted(pointer_arg(2)), value_uaddr, size) } probe nd_syscall.getxattr.return = kprobe.function("sys_getxattr").return ? { name = "getxattr" retstr = returnstr(1) } # init_module ________________________________________________ # long sys_init_module(void __user *umod, # unsigned long len, # const char __user *uargs) # probe nd_syscall.init_module = kprobe.function("sys_init_module") ? { name = "init_module" asmlinkage() umod_uaddr = pointer_arg(1) len = ulong_arg(2) uargs = user_string_quoted(pointer_arg(3)) argstr = sprintf("%p, %u, %s", umod_uaddr, len, uargs) } probe nd_syscall.init_module.return = kprobe.function("sys_init_module").return ? { name = "init_module" retstr = returnstr(1) } # inotify_add_watch __________________________________________ # # long sys_inotify_add_watch(int fd, const char __user *path, u32 mask) # probe nd_syscall.inotify_add_watch = kprobe.function("sys_inotify_add_watch") ? { name = "inotify_add_watch" asmlinkage() fd = int_arg(1) path_uaddr = pointer_arg(2) path = user_string_quoted(path_uaddr) mask = uint_arg(3) argstr = sprintf("%d, %s, %s", fd, user_string_quoted(path_uaddr), _inotify_watch_mask_str(mask)) } probe nd_syscall.inotify_add_watch.return = kprobe.function("sys_inotify_add_watch").return ? { name = "inotify_add_watch" retstr = returnstr(1) } # inotify_init _______________________________________________ # # long sys_inotify_init(void) # SYSCALL_DEFINE1(inotify_init1, int, flags) # probe nd_syscall.inotify_init = __nd_syscall.inotify_init1 ?, __nd_syscall.inotify_init ? { } probe __nd_syscall.inotify_init1 = kprobe.function("sys_inotify_init1") { @__syscall_compat_gate(%{ __NR_inotify_init1 %}, %{ __NR_compat_inotify_init1 %}) asmlinkage() name = "inotify_init1" flags = int_arg(1) argstr = _inotify_init1_flag_str(flags) } probe __nd_syscall.inotify_init = kprobe.function("sys_inotify_init") { name = "inotify_init" flags = 0 argstr = "" } probe nd_syscall.inotify_init.return = __nd_syscall.inotify_init1.return ?, __nd_syscall.inotify_init.return ? { } probe __nd_syscall.inotify_init1.return = kprobe.function("sys_inotify_init1").return { @__syscall_compat_gate(%{ __NR_inotify_init1 %}, %{ __NR_compat_inotify_init1 %}) name = "inotify_init1" retstr = returnstr(1) } probe __nd_syscall.inotify_init.return = kprobe.function("sys_inotify_init").return { name = "inotify_init" retstr = returnstr(1) } # inotify_rm_watch ___________________________________________ # # long sys_inotify_rm_watch(int fd, u32 wd) # probe nd_syscall.inotify_rm_watch = kprobe.function("sys_inotify_rm_watch") ? { name = "inotify_rm_watch" asmlinkage() fd = int_arg(1) wd = int_arg(2) argstr = sprintf("%d, %d", fd, wd) } probe nd_syscall.inotify_rm_watch.return = kprobe.function("sys_inotify_rm_watch").return ? { name = "inotify_rm_watch" retstr = returnstr(1) } # io_cancel __________________________________________________ # long sys_io_cancel(aio_context_t ctx_id, # struct iocb __user *iocb, # struct io_event __user *result) probe nd_syscall.io_cancel = kprobe.function("sys_io_cancel") ? { name = "io_cancel" asmlinkage() ctx_id = ulong_arg(1) iocb_uaddr = pointer_arg(2) result_uaddr = pointer_arg(3) argstr = sprintf("%u, %p, %p", ctx_id, iocb_uaddr, result_uaddr) } probe nd_syscall.io_cancel.return = kprobe.function("sys_io_cancel").return ? { name = "io_cancel" retstr = returnstr(1) } # ioctl ______________________________________________________ # long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) # long compat_sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) # probe nd_syscall.ioctl = __nd_syscall.ioctl, kprobe.function("compat_sys_ioctl") ? { asmlinkage() name = "ioctl" fd = int_arg(1) request = int_arg(2) argp = ulong_arg(3) argstr = sprintf("%d, %d, %p", fd, request, argp) } probe __nd_syscall.ioctl = kprobe.function("sys_ioctl") { @__syscall_gate(%{ __NR_ioctl %}) } probe nd_syscall.ioctl.return = __nd_syscall.ioctl.return, kprobe.function("compat_sys_ioctl").return ? { name = "ioctl" retstr = returnstr(1) } probe __nd_syscall.ioctl.return = kprobe.function("sys_ioctl").return { @__syscall_gate(%{ __NR_ioctl %}) } # io_destroy _________________________________________________ # long sys_io_destroy(aio_context_t ctx) probe nd_syscall.io_destroy = kprobe.function("sys_io_destroy") ? { name = "io_destroy" asmlinkage() ctx = ulong_arg(1) argstr = sprintf("%u", ctx) } probe nd_syscall.io_destroy.return = kprobe.function("sys_io_destroy").return ? { name = "io_destroy" retstr = returnstr(1) } # io_getevents _______________________________________________ # long sys_io_getevents(aio_context_t ctx_id, # long min_nr, # long nr, # struct io_event __user *events, # struct timespec __user *timeout) # long compat_sys_io_getevents(aio_context_t ctx_id, # long min_nr, # long nr, # struct io_event __user *events, # struct compat_timespec __user *timeout) # probe nd_syscall.io_getevents = __nd_syscall.io_getevents ?, kprobe.function("compat_sys_io_getevents") ? { name = "io_getevents" asmlinkage() ctx_id = ulong_arg(1) min_nr = long_arg(2) nr = long_arg(3) events_uaddr = pointer_arg(4) timeout_uaddr = pointer_arg(5) timestr = (@__compat_task ? _struct_compat_timespec_u(timeout_uaddr, 1) : _struct_timespec_u(timeout_uaddr, 1)) argstr = sprintf("%u, %d, %d, %p, %s", ctx_id, min_nr, nr, events_uaddr, timestr) } probe __nd_syscall.io_getevents = kprobe.function("sys_io_getevents") { @__syscall_gate_compat_simple } probe nd_syscall.io_getevents.return = __nd_syscall.io_getevents.return, kprobe.function("compat_sys_io_getevents").return ? { name = "io_getevents" retstr = returnstr(1) } probe __nd_syscall.io_getevents.return = kprobe.function("sys_io_getevents").return ? { @__syscall_gate_compat_simple } # ioperm _____________________________________________________ # long sys_ioperm(unsigned long from, unsigned long num, int turn_on) # probe nd_syscall.ioperm = kprobe.function("sys_ioperm") ? { name = "ioperm" asmlinkage() from = ulong_arg(1) num = ulong_arg(2) turn_on = uint_arg(3) argstr = sprintf("%#x, %#x, %#x", from, num, turn_on) } probe nd_syscall.ioperm.return = kprobe.function("sys_ioperm").return ? { name = "ioperm" retstr = returnstr(1) } # io_setup ___________________________________________________ # long sys_io_setup(unsigned nr_events, aio_context_t __user *ctxp) # long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p) # probe nd_syscall.io_setup = __nd_syscall.io_setup, kprobe.function("compat_sys_io_setup") ? { asmlinkage() name = "io_setup" maxevents = uint_arg(1) ctxp_uaddr = pointer_arg(2) argstr = sprintf("%u, %p", maxevents, ctxp_uaddr) } probe __nd_syscall.io_setup = kprobe.function("sys_io_setup") ? { @__syscall_gate(%{ __NR_io_setup %}) } probe nd_syscall.io_setup.return = __nd_syscall.io_setup.return, kprobe.function("compat_sys_io_setup").return ? { name = "io_setup" retstr = returnstr(1) } probe __nd_syscall.io_setup.return = kprobe.function("sys_io_setup").return ? { @__syscall_gate(%{ __NR_io_setup %}) } # io_submit __________________________________________________ # long sys_io_submit(aio_context_t ctx_id, long nr, struct iocb __user * __user *iocbpp) # long compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 __user *iocb) # probe nd_syscall.io_submit = __nd_syscall.io_submit, kprobe.function("compat_sys_io_submit") ? { name = "io_submit" asmlinkage() ctx_id = ulong_arg(1) nr = long_arg(2) iocbpp_uaddr = pointer_arg(3) argstr = sprintf("%u, %d, %p", ctx_id, nr, iocbpp_uaddr) } probe __nd_syscall.io_submit = kprobe.function("sys_io_submit") ? { @__syscall_gate(%{ __NR_io_submit %}) } probe nd_syscall.io_submit.return = __nd_syscall.io_submit.return, kprobe.function("compat_sys_io_submit").return ? { name = "io_submit" retstr = returnstr(1) } probe __nd_syscall.io_submit.return = kprobe.function("sys_io_submit").return ? { @__syscall_gate(%{ __NR_io_submit %}) } # ioprio_get _________________________________________________ # long sys_ioprio_get(int which, int who) # probe nd_syscall.ioprio_get = kprobe.function("sys_ioprio_get") ? { name = "ioprio_get" asmlinkage() which = int_arg(1) which_str = _stp_ioprio_which_str(which) who = int_arg(2) argstr = sprintf("%s, %d", _stp_ioprio_which_str(which), who) } probe nd_syscall.ioprio_get.return = kprobe.function("sys_ioprio_get").return ? { name = "ioprio_get" retstr = returnstr(1) } # ioprio_set _________________________________________________ # long sys_ioprio_set(int which, int who, int ioprio) # probe nd_syscall.ioprio_set = kprobe.function("sys_ioprio_set") ? { name = "ioprio_set" asmlinkage() which = int_arg(1) which_str = _stp_ioprio_which_str(which) who = int_arg(2) ioprio = int_arg(3) ioprio_str = _stp_ioprio_value_str(ioprio) argstr = sprintf("%s, %d, %s", which_str, who, ioprio_str) } probe nd_syscall.ioprio_set.return = kprobe.function("sys_ioprio_set").return ? { name = "ioprio_set" retstr = returnstr(1) } # kcmp _______________________________________________________ # SYSCALL_DEFINE5(kcmp, pid_t, pid1, pid_t, pid2, int, type, # unsigned long, idx1, unsigned long, idx2) probe nd_syscall.kcmp = kprobe.function("sys_kcmp") ? { name = "kcmp" pid1 = int_arg(1) pid2 = int_arg(2) type = int_arg(3) type_str = _kcmp_type_str(type) idx1 = ulong_arg(4) idx2 = ulong_arg(5) argstr = sprintf("%d, %d, %s, %u, %u", pid1, pid2, type_str, idx1, idx2) } probe nd_syscall.kcmp.return = kprobe.function("sys_kcmp").return ? { name = "kcmp" retstr = returnstr(1) } # kexec_file_load ____________________________________________ # The kexec_file_load() system call first appeared in Linux 3.17 # SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd, # unsigned long, cmdline_len, const char __user *, cmdline_ptr, # unsigned long, flags) probe nd_syscall.kexec_file_load = kprobe.function("sys_kexec_file_load") ? { name = "kexec_file_load" kernel_fd = int_arg(1) initrd_fd = int_arg(2) cmdline_len = ulong_arg(3) cmdline = user_string_quoted(pointer_arg(4)) flags = ulong_arg(5) flags_str = _kexec_file_load_flags_str(flags) argstr = sprintf("%d, %d, %u, %s, %s", kernel_fd, initrd_fd, cmdline_len, cmdline, _kexec_file_load_flags_str(flags)) } probe nd_syscall.kexec_file_load.return = kprobe.function("sys_kexec_file_load").return ? { name = "kexec_file_load" retstr = returnstr(1) } # kexec_load _________________________________________________ # long sys_kexec_load(unsigned long entry, # unsigned long nr_segments, # struct kexec_segment __user *segments, # unsigned long flags) # long compat_sys_kexec_load(unsigned long entry, # unsigned long nr_segments, # struct compat_kexec_segment __user *segments, # unsigned long flags) # probe nd_syscall.kexec_load = __nd_syscall.kexec_load ?, kprobe.function("compat_sys_kexec_load") ? { name = "kexec_load" asmlinkage() entry = ulong_arg(1) nr_segments = ulong_arg(2) segments_uaddr = pointer_arg(3) flags = ulong_arg(4) flags_str = _kexec_flags_str(flags) argstr = sprintf("%p, %u, %p, %s", entry, nr_segments, segments_uaddr, flags_str) } probe __nd_syscall.kexec_load = kprobe.function("sys_kexec_load") { @__syscall_gate_compat_simple } probe nd_syscall.kexec_load.return = __nd_syscall.kexec_load.return ?, kprobe.function("compat_sys_kexec_load").return ? { name = "kexec_load" retstr = returnstr(1) } probe __nd_syscall.kexec_load.return = kprobe.function("sys_kexec_load").return { @__syscall_gate_compat_simple } # keyctl _____________________________________________________ # long sys_keyctl(int option, # unsigned long arg2, # unsigned long arg3, # unsigned long arg4, # unsigned long arg5) # long compat_sys_keyctl(u32 option, u32 arg2, u32 arg3, u32 arg4, u32 arg5) # probe nd_syscall.keyctl = kprobe.function("compat_sys_keyctl") ?, kprobe.function("sys_keyctl") ? { name = "keyctl" asmlinkage() option = int_arg(1) arg2 = ulong_arg(2) arg3 = ulong_arg(3) arg4 = ulong_arg(4) arg5 = ulong_arg(5) @__keyctl_argstr(option, arg2, arg3, arg4, arg5) } probe nd_syscall.keyctl.return = kprobe.function("compat_sys_keyctl").return ?, kprobe.function("sys_keyctl").return ? { name = "keyctl" retstr = returnstr(1) } # kill _______________________________________________________ # long sys_kill(int pid, int sig) probe nd_syscall.kill = kprobe.function("sys_kill") ? { name = "kill" asmlinkage() pid = int_arg(1) sig = int_arg(2) argstr = sprintf("%d, %s", pid, _signal_name(sig)) } probe nd_syscall.kill.return = kprobe.function("sys_kill").return ? { name = "kill" retstr = returnstr(1) } # lchown _____________________________________________________ # long sys_lchown(const char __user * filename, uid_t user, gid_t group) # probe nd_syscall.lchown = kprobe.function("sys_lchown") ? { // Avoid lchown16() calling lchown(). %( arch == "x86_64" %? @__syscall_compat_gate(%{ __NR_lchown %}, %{ __NR_ia32_lchown32 %}) %) %( arch == "i386" %? @__syscall_gate(%{ __NR_lchown32 %}) %) name = "lchown" asmlinkage() path = user_string_quoted(pointer_arg(1)) owner = __int32(uint_arg(2)) group = __int32(uint_arg(3)) argstr = sprintf("%s, %d, %d", user_string_quoted(pointer_arg(1)), owner, group) } probe nd_syscall.lchown.return = kprobe.function("sys_lchown").return ? { %( arch == "x86_64" %? @__syscall_compat_gate(%{ __NR_lchown %}, %{ __NR_ia32_lchown32 %}) %) %( arch == "i386" %? @__syscall_gate(%{ __NR_lchown32 %}) %) name = "lchown" retstr = returnstr(1) } # lchown16 ___________________________________________________ # long sys_lchown16(const char __user * filename, old_uid_t user, # old_gid_t group) # probe nd_syscall.lchown16 = kprobe.function("sys_lchown16") ? { name = "lchown16" asmlinkage() path = user_string_quoted(pointer_arg(1)) owner = __short(uint_arg(2)) group = __short(uint_arg(3)) argstr = sprintf("%s, %d, %d", user_string_quoted(pointer_arg(1)), owner, group) } probe nd_syscall.lchown16.return = kprobe.function("sys_lchown16").return ? { name = "lchown16" retstr = returnstr(1) } # lgetxattr __________________________________________________ # ssize_t sys_lgetxattr(char __user *path, # char __user *name, # void __user *value, # size_t size) # probe nd_syscall.lgetxattr = kprobe.function("sys_lgetxattr") ? { name = "lgetxattr" asmlinkage() path = user_string_quoted(pointer_arg(1)) # 'name2' should have been 'name_str'. Deprecate the old name. %(systemtap_v <= "1.4" %? name2 = user_string_quoted(pointer_arg(2)) %) name_str = user_string_quoted(pointer_arg(2)) value_uaddr = pointer_arg(3) size = ulong_arg(4) argstr = sprintf("%s, %s, %p, %u", user_string_quoted(pointer_arg(1)), user_string_quoted(pointer_arg(2)), value_uaddr, size) } probe nd_syscall.lgetxattr.return = kprobe.function("sys_lgetxattr").return ? { name = "lgetxattr" retstr = returnstr(1) } # link _______________________________________________________ # long sys_link(const char __user * oldname, # const char __user * newname) probe nd_syscall.link = kprobe.function("sys_link") ? { name = "link" asmlinkage() oldpath = user_string_quoted(pointer_arg(1)) newpath = user_string_quoted(pointer_arg(2)) argstr = sprintf("%s, %s", user_string_quoted(pointer_arg(1)), user_string_quoted(pointer_arg(2))) } probe nd_syscall.link.return = kprobe.function("sys_link").return ? { name = "link" retstr = returnstr(1) } # linkat _____________________________________________________ # new function with 2.6.16 # long sys_linkat(int olddfd, const char __user *oldname, # int newdfd, const char __user *newname, int flags) probe nd_syscall.linkat = kprobe.function("sys_linkat") ? { @__syscall_compat_gate(%{ __NR_linkat %}, %{ __NR_compat_linkat %}) name = "linkat" asmlinkage() olddirfd = int_arg(1) olddirfd_str = _dfd_str(olddirfd) oldpath = user_string_quoted(pointer_arg(2)) newdirfd = int_arg(3) newdirfd_str = _dfd_str(newdirfd) newpath = user_string_quoted(pointer_arg(4)) flags = int_arg(5) flags_str = _at_flag_str(flags) argstr = sprintf("%s, %s, %s, %s, %s", olddirfd_str, user_string_quoted(pointer_arg(2)), newdirfd_str, user_string_quoted(pointer_arg(4)), flags_str) } probe nd_syscall.linkat.return = kprobe.function("sys_linkat").return ? { @__syscall_compat_gate(%{ __NR_linkat %}, %{ __NR_compat_linkat %}) name = "linkat" retstr = returnstr(1) } # listen _____________________________________________________ # long sys_listen(int fd, int backlog) probe nd_syscall.listen = __nd_syscall.listen ?, __nd_syscall.socketcall.listen ?, __nd_syscall.compat_socketcall.listen ? { name = "listen" argstr = sprintf("%d, %d", sockfd, backlog) } probe __nd_syscall.listen = kprobe.function("sys_listen") ? { @__syscall_gate(%{ __NR_listen %}) asmlinkage() sockfd = int_arg(1) backlog = int_arg(2) } probe __nd_syscall.socketcall.listen = kprobe.function("sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_LISTEN %}) next; __args = &@cast(pointer_arg(2), "ulong", "kernel<linux/types.h>") sockfd = __int32(user_ulong(&(__args)[0])) backlog = __int32(user_ulong(&(__args)[1])) } probe __nd_syscall.compat_socketcall.listen = kprobe.function("compat_sys_socketcall").call ? { asmlinkage() if (int_arg(1) != %{ SYS_LISTEN %}) next; __args = &@cast(pointer_arg(2), "unsigned int", "kernel<linux/types.h>") sockfd = user_int(&(__args)[0]) backlog = user_int(&(__args)[1]) } probe nd_syscall.listen.return = __nd_syscall.listen.return ?, __nd_syscall.socketcall.listen.return ? { name = "listen" retstr = returnstr(1) } probe __nd_syscall.listen.return = kprobe.function("sys_listen").return ? { @__syscall_gate(%{ __NR_listen %}) } probe __nd_syscall.socketcall.listen.return = kprobe.function("sys_socketcall").return ?, kprobe.function("compat_sys_socketcall").return ? { if (@entry(__asmlinkage_int_arg(1)) != %{ SYS_LISTEN %}) next; } # listxattr __________________________________________________ # ssize_t sys_listxattr(char __user *path, char __user *list, size_t size) # probe nd_syscall.listxattr = kprobe.function("sys_listxattr") ? { name = "listxattr" asmlinkage() path_uaddr = pointer_arg(1) path = user_string_quoted(path_uaddr) list_uaddr = pointer_arg(2) size = ulong_arg(3) argstr = sprintf("%s, %p, %u", user_string_quoted(path_uaddr), list_uaddr, size) } probe nd_syscall.listxattr.return = kprobe.function("sys_listxattr").return ? { name = "listxattr" retstr = returnstr(1) } # llistxattr _________________________________________________ # ssize_t sys_llistxattr(char __user *path, char __user *list, size_t size) # probe nd_syscall.llistxattr = kprobe.function("sys_llistxattr") ? { name = "llistxattr" asmlinkage() path_uaddr = pointer_arg(1) path = user_string_quoted(path_uaddr) list_uaddr = pointer_arg(2) size = ulong_arg(3) argstr = sprintf("%s, %p, %u", user_string_quoted(path_uaddr), list_uaddr, size) } probe nd_syscall.llistxattr.return = kprobe.function("sys_llistxattr").return ? { name = "llistxattr" retstr = returnstr(1) } # llseek _____________________________________________________ # long sys_llseek(unsigned int fd, # unsigned long offset_high, # unsigned long offset_low, # loff_t __user * result, # unsigned int whence) probe nd_syscall.llseek = kprobe.function("sys_llseek") ? { name = "llseek" asmlinkage() fd = int_arg(1) offset_high = ulong_arg(2) offset_low = ulong_arg(3) result_uaddr = pointer_arg(4) whence = uint_arg(5) whence_str = _seek_whence_str(whence) argstr = sprintf("%d, 0x%x, 0x%x, %p, %s", fd, offset_high, offset_low, result_uaddr, whence_str) } probe nd_syscall.llseek.return = kprobe.function("sys_llseek").return ? { name = "llseek" retstr = returnstr(1) } # lookup_dcookie _____________________________________________ # long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len) # probe nd_syscall.lookup_dcookie = kprobe.function("sys_lookup_dcookie") ? { name = "lookup_dcookie" asmlinkage() %( CONFIG_64BIT == "y" %? @__syscall_gate_compat_simple cookie = ulonglong_arg(1) buffer_uaddr = pointer_arg(2) len = ulong_arg(3) %: # On a 32-bit kernel, 'long long' arguments take the space of # 2 arguments, so we have to adjust the following argument # numbers. cookie = ulonglong_arg(1) buffer_uaddr = pointer_arg(3) len = ulong_arg(4) %) argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) } probe nd_syscall.lookup_dcookie.return = kprobe.function("sys_lookup_dcookie").return ? { @__syscall_gate_compat_simple name = "lookup_dcookie" retstr = returnstr(1) } # lremovexattr _______________________________________________ # long sys_lremovexattr(char __user *path, char __user *name) # probe nd_syscall.lremovexattr = kprobe.function("sys_lremovexattr") ? { name = "lremovexattr" asmlinkage() path_uaddr = pointer_arg(1) path = user_string_quoted(path_uaddr) name_uaddr = pointer_arg(2) # 'name2' should have been 'name_str'. Deprecate the old name. %(systemtap_v <= "1.4" %? name2 = user_string_quoted(name_uaddr) %) name_str = user_string_quoted(name_uaddr) argstr = sprintf("%s, %s", user_string_quoted(path_uaddr), user_string_quoted(name_uaddr)) } probe nd_syscall.lremovexattr.return = kprobe.function("sys_lremovexattr").return ? { name = "lremovexattr" retstr = returnstr(1) } # lseek ______________________________________________________ # off_t sys_lseek(unsigned int fd, off_t offset, unsigned int whence) # COMPAT_SYSCALL_DEFINE3(lseek, unsigned int, fd, compat_off_t, offset, # unsigned int, whence) # probe nd_syscall.lseek = kprobe.function("sys_lseek"), kprobe.function("compat_sys_lseek") ? { name = "lseek" asmlinkage() fildes = int_arg(1) offset = long_arg(2) whence = uint_arg(3) whence_str = _seek_whence_str(whence) argstr = sprintf("%d, %d, %s", fildes, offset, whence_str) } probe nd_syscall.lseek.return = kprobe.function("sys_lseek").return, kprobe.function("compat_sys_lseek").return ? { name = "lseek" retstr = returnstr(1) } # lsetxattr __________________________________________________ # long sys_lsetxattr(char __user *path, # char __user *name, # void __user *value, # size_t size, # int flags) # probe nd_syscall.lsetxattr = kprobe.function("sys_lsetxattr") ? { name = "lsetxattr" asmlinkage() path_uaddr = pointer_arg(1) path = user_string_quoted(path_uaddr) name_uaddr = pointer_arg(2) name_str = user_string_quoted(name_uaddr) value_uaddr = pointer_arg(3) size = ulong_arg(4) value_str = _stp_xattr_val_str(value_uaddr, size) flags = int_arg(5) flags_str = _stp_xattr_flags_str(flags) argstr = sprintf("%s, %s, %s, %u, %s", user_string_quoted(path_uaddr), user_string_quoted(name_uaddr), _stp_xattr_val_str(value_uaddr, size), size, _stp_xattr_flags_str(flags)) } probe nd_syscall.lsetxattr.return = kprobe.function("sys_lsetxattr").return ? { name = "lsetxattr" retstr = returnstr(1) } # lstat ______________________________________________________ # long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf) # long sys_newlstat(char __user * filename, struct stat __user * statbuf) # long compat_sys_newlstat(char __user * filename, struct compat_stat __user *statbuf) # long sys32_lstat64(char * filename, struct stat64 __user *statbuf) # long sys_lstat64(char __user * filename, struct stat64 __user * statbuf) # long sys_oabi_lstat64(char __user * filename, # struct oldabi_stat64 __user * statbuf) # probe nd_syscall.lstat = kprobe.function("sys_lstat") ?, kprobe.function("sys_newlstat") ?, kprobe.function("compat_sys_newlstat") ?, kprobe.function("sys32_lstat64") ?, kprobe.function("sys_lstat64") ?, kprobe.function("sys_oabi_lstat64") ? { name = "lstat" asmlinkage() path = user_string_quoted(pointer_arg(1)) buf_uaddr = pointer_arg(2) argstr = sprintf("%s, %p", user_string_quoted(pointer_arg(1)), buf_uaddr) } probe nd_syscall.lstat.return = kprobe.function("sys_lstat").return ?, kprobe.function("sys_newlstat").return ?, kprobe.function("compat_sys_newlstat").return ?, kprobe.function("sys32_lstat64").return ?, kprobe.function("sys_lstat64").return ?, kprobe.function("sys_oabi_lstat64").return ? { name = "lstat" retstr = returnstr(1) } # madvise ____________________________________________________ # long sys_madvise(unsigned long start, size_t len_in, int behavior) # probe nd_syscall.madvise = kprobe.function("sys_madvise") ? { name = "madvise" asmlinkage() start = ulong_arg(1) length = ulong_arg(2) advice = int_arg(3) advice_str = _madvice_advice_str(advice) argstr = sprintf("%p, %u, %s", start, length, _madvice_advice_str(advice)) } probe nd_syscall.madvise.return = kprobe.function("sys_madvise").return ? { name = "madvise" retstr = returnstr(1) } # mbind ______________________________________________________ # long sys_mbind(unsigned long start, # unsigned long len, # unsigned long mode, # unsigned long __user *nmask, # unsigned long maxnode, # unsigned flags) # # long compat_sys_mbind(compat_ulong_t start, # compat_ulong_t len, # compat_ulong_t mode, # compat_ulong_t __user *nmask, # compat_ulong_t maxnode, # compat_ulong_t flags) # probe nd_syscall.mbind = __nd_syscall.mbind ?, kprobe.function("compat_sys_mbind") ? { name = "mbind" asmlinkage() start = pointer_arg(1) len = ulong_arg(2) mode = int_arg(3) mode_str = _mempolicy_mode_str(mode) nmask_uaddr = pointer_arg(4) maxnode = ulong_arg(5) flags = uint_arg(6) flags_str = _mempolicy_flags_str(flags) argstr = sprintf("%p, %u, %s, %p, %u, %s", start, len, mode_str, nmask_uaddr, maxnode, flags_str) } probe __nd_syscall.mbind = kprobe.function("sys_mbind") { %( arch == "powerpc" %? @__syscall_gate_compat_simple %) } probe nd_syscall.mbind.return = __nd_syscall.mbind.return ?, kprobe.function("compat_sys_mbind").return ? { name = "mbind" retstr = returnstr(1) } probe __nd_syscall.mbind.return = kprobe.function("sys_mbind").return { %( arch == "powerpc" %? @__syscall_gate_compat_simple %) } # memfd_create _____________________________________________________ # long sys_memfd_create (const char __user* uname, unsigned int flags) probe nd_syscall.memfd_create = kprobe.function("sys_memfd_create") ? { name = "memfd_create" asmlinkage() uname = user_string_quoted(pointer_arg(1)) flags = uint_arg(2) flags_str = _mfd_flags_str(uint_arg(2)) argstr = sprintf("%s, %s", user_string_quoted(pointer_arg(1)), flags_str) } probe nd_syscall.memfd_create.return = kprobe.function("sys_memfd_create").return ? { name = "memfd_create" retstr = returnstr(1) } # migrate_pages ____________________________________________________ # long sys_migrate_pages(pid_t pid, unsigned long maxnode, # const unsigned long __user *old_nodes, # const unsigned long __user *new_nodes) probe nd_syscall.migrate_pages = __nd_syscall.migrate_pages ?, kprobe.function("compat_sys_migrate_pages") ? { name = "migrate_pages" asmlinkage() pid = int_arg(1) maxnode = ulong_arg(2) old_nodes = pointer_arg(3) new_nodes = pointer_arg(4) argstr = sprintf("%d, %u, %p, %p", pid, maxnode, old_nodes, new_nodes) } probe __nd_syscall.migrate_pages = kprobe.function("sys_migrate_pages") { %( arch == "powerpc" %? @__syscall_gate_compat_simple %) } probe nd_syscall.migrate_pages.return = __nd_syscall.migrate_pages.return ?, kprobe.function("compat_sys_migrate_pages").return ? { name = "migrate_pages" retstr = returnstr(1) } probe __nd_syscall.migrate_pages.return = kprobe.function("sys_migrate_pages").return { %( arch == "powerpc" %? @__syscall_gate_compat_simple %) } # mincore ____________________________________________________ # long sys_mincore(unsigned long start, size_t len, unsigned char __user * vec) # probe nd_syscall.mincore = kprobe.function("sys_mincore") ? { name = "mincore" asmlinkage() start = pointer_arg(1) length = ulong_arg(2) vec_uaddr = pointer_arg(3) argstr = sprintf("%p, %u, %p", start, length, vec_uaddr) } probe nd_syscall.mincore.return = kprobe.function("sys_mincore").return ? { name = "mincore" retstr = returnstr(1) } # mkdir ______________________________________________________ # long sys_mkdir(const char __user * pathname, int mode) probe nd_syscall.mkdir = kprobe.function("sys_mkdir") ? { name = "mkdir" asmlinkage() pathname_uaddr = pointer_arg(1) pathname = user_string_quoted(pathname_uaddr) mode = uint_arg(2) argstr = sprintf("%s, %#o", user_string_quoted(pathname_uaddr), mode) } probe nd_syscall.mkdir.return = kprobe.function("sys_mkdir").return ? { name = "mkdir" retstr = returnstr(1) } # mkdirat ____________________________________________________ # new function with 2.6.16 # long sys_mkdirat(int dfd, const char __user *pathname, int mode) probe nd_syscall.mkdirat = kprobe.function("sys_mkdirat") ? { @__syscall_compat_gate(%{ __NR_mkdirat %}, %{ __NR_compat_mkdirat %}) name = "mkdirat" asmlinkage() dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) pathname = user_string_quoted(pointer_arg(2)) mode = uint_arg(3) argstr = sprintf("%s, %s, %#o", dirfd_str, user_string_quoted(pointer_arg(2)), mode) } probe nd_syscall.mkdirat.return = kprobe.function("sys_mkdirat").return ? { @__syscall_compat_gate(%{ __NR_mkdirat %}, %{ __NR_compat_mkdirat %}) name = "mkdirat" retstr = returnstr(1) } # mknod ______________________________________________________ # long sys_mknod(const char __user * filename, int mode, unsigned dev) probe nd_syscall.mknod = kprobe.function("sys_mknod") ? { name = "mknod" asmlinkage() pathname = user_string_quoted(pointer_arg(1)) mode = uint_arg(2) dev = uint_arg(3) argstr = sprintf("%s, %s, %u", pathname, _mknod_mode_str(mode), dev) } probe nd_syscall.mknod.return = kprobe.function("sys_mknod").return ? { name = "mknod" retstr = returnstr(1) } # mknodat ____________________________________________________ # new function with 2.6.16 # long sys_mknodat(int dfd, const char __user *filename, # int mode, unsigned dev) probe nd_syscall.mknodat = kprobe.function("sys_mknodat") ? { @__syscall_compat_gate(%{ __NR_mknodat %}, %{ __NR_compat_mknodat %}) name = "mknodat" asmlinkage() dirfd = int_arg(1) dirfd_str = _dfd_str(dirfd) pathname = user_string_quoted(pointer_arg(2)) mode = uint_arg(3) mode_str = _mknod_mode_str(mode) dev = uint_arg(4) argstr = sprintf("%s, %s, %s, %u", dirfd_str, pathname, mode_str, dev) } probe nd_syscall.mknodat.return = kprobe.function("sys_mknodat").return ? { @__syscall_compat_gate(%{ __NR_mknodat %}, %{ __NR_compat_mknodat %}) name = "mknodat" retstr = returnstr(1) } # mlock ______________________________________________________ # # long sys_mlock(unsigned long start, size_t len) # probe nd_syscall.mlock = kprobe.function("sys_mlock") ? { name = "mlock" asmlinkage() addr = ulong_arg(1) len = ulong_arg(2) argstr = sprintf("%p, %u", addr, len) } probe nd_syscall.mlock.return = kprobe.function("sys_mlock").return ? { name = "mlock" retstr = returnstr(1) } # mlockall ___________________________________________________ # # long sys_mlockall(int flags) # probe nd_syscall.mlockall = kprobe.function("sys_mlockall") ? { name = "mlockall" asmlinkage() flags = int_arg(1) argstr = _mlockall_flags_str(flags) } probe nd_syscall.mlockall.return = kprobe.function("sys_mlockall").return ? { name = "mlockall" retstr = returnstr(1) } # modify_ldt _________________________________________________ # int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount) # probe nd_syscall.modify_ldt = kprobe.function("sys_modify_ldt") ? { name = "modify_ldt" asmlinkage() func = int_arg(1) ptr_uaddr = pointer_arg(2) bytecount = ulong_arg(3) argstr = sprintf("%d, %p, %u", func, ptr_uaddr, bytecount) } probe nd_syscall.modify_ldt.return = kprobe.function("sys_modify_ldt").return ? { name = "modify_ldt" retstr = returnstr(1) } # move_pages ____________________________________________________ # long sys_move_pages(pid_t pid, unsigned long nr_pages, # const void __user * __user *pages, # const int __user *nodes, # int __user *status, # int flags) # # long compat_sys_move_pages(pid_t pid, unsigned long nr_pages, # compat_uptr_t __user *pages32, # const int __user *nodes, # int __user *status, # int flags) # probe nd_syscall.move_pages = __nd_syscall.move_pages ?, kprobe.function("compat_sys_move_pages") ? { name = "move_pages" asmlinkage() pid = int_arg(1) nr_pages = ulong_arg(2) pages = pointer_arg(3) nodes = pointer_arg(4) status = pointer_arg(5) flags = int_arg(6) flags_str = _mempolicy_flags_str(flags) argstr = sprintf("%d, %u, %p, %p, %p, %s", pid, nr_pages, pages, nodes, status, flags_str) } probe __nd_syscall.move_pages = kprobe.function("sys_move_pages") { @__syscall_gate(%{ __NR_move_pages %}) } probe nd_syscall.move_pages.return = __nd_syscall.move_pages.return ?, kprobe.function("compat_sys_move_pages").return ? { name = "move_pages" retstr = returnstr(1) } probe __nd_syscall.move_pages.return = kprobe.function("sys_move_pages").return { @__syscall_gate(%{ __NR_move_pages %}) } # mount ______________________________________________________ # long sys_mount(char __user * dev_name, # char __user * dir_name, # char __user * type, # unsigned long flags, # void __user * data) # long compat_sys_mount(char __user * dev_name, # char __user * dir_name, # char __user * type, # unsigned long flags, # void __user * data) probe nd_syscall.mount = kprobe.function("compat_sys_mount") ?, kprobe.function("sys_mount") ? { name = "mount" asmlinkage() source = user_string_quoted(pointer_arg(1)) target = user_string_quoted(pointer_arg(2)) filesystemtype = user_string_quoted(pointer_arg(3)) mountflags = ulong_arg(4) mountflags_str = _mountflags_str(mountflags) data = user_string_n_quoted(pointer_arg(5), syscall_string_trunc) argstr = sprintf("%s, %s, %s, %s, %s", user_string_quoted(pointer_arg(1)), user_string_quoted(pointer_arg(2)), user_string_quoted(pointer_arg(3)), mountflags_str, data) } probe nd_syscall.mount.return = kprobe.function("compat_sys_mount").return ?, kprobe.function("sys_mount").return ? { name = "mount" retstr = returnstr(1) } %( kernel_v >= "2.6.33" %? # In newer kernels (2.6.33+), all the sys_mmap() variants are just # wrappers around sys_mmap_pgoff(), which is in arch-generic code. # # long sys_mmap_pgoff(unsigned long addr, unsigned long len, # unsigned long prot, unsigned long flags, # unsigned long fd, unsigned long pgoff) probe nd_syscall.mmap2 = kprobe.function("sys_mmap_pgoff") ? { name = "mmap2" asmlinkage() start = ulong_arg(1) length = ulong_arg(2) prot = ulong_arg(3) flags = ulong_arg(4) # Although the kernel gets an unsigned long fd, on the # user-side it is a signed int. Fix this. fd = int_arg(5) # $pgoff is the number of pages. Convert this back into a # number of bytes. pgoffset = ulong_arg(6) * %{ /* pure */ PAGE_SIZE %} argstr = sprintf("%p, %u, %s, %s, %d, %d", start, length, _mprotect_prot_str(prot), _mmap_flags(flags), fd, pgoffset) } probe nd_syscall.mmap2.return = kprobe.function("sys_mmap_pgoff").return ? { name = "mmap2" retstr = returnstr(2) } %) # mprotect ___________________________________________________ # long sys_mprotect(unsigned long start, size_t len, unsigned long prot) # probe nd_syscall.mprotect = kprobe.function("sys_mprotect") ? { name = "mprotect" asmlinkage() addr = ulong_arg(1) len = ulong_arg(2) prot = ulong_arg(3) prot_str = _mprotect_prot_str(prot) argstr = sprintf("%p, %d, %s", addr, len, _mprotect_prot_str(prot)) } probe nd_syscall.mprotect.return = kprobe.function("sys_mprotect").return ? { name = "mprotect" retstr = returnstr(1) } # mq_getsetattr ______________________________________________ # long sys_mq_getsetattr(mqd_t mqdes, # const struct mq_attr __user *u_mqstat, # struct mq_attr __user *u_omqstat) # long compat_sys_mq_getsetattr(mqd_t mqdes, # const struct compat_mq_attr __user *u_mqstat, # struct compat_mq_attr __user *u_omqstat) # probe nd_syscall.mq_getsetattr = __nd_syscall.mq_getsetattr ?, kprobe.function("compat_sys_mq_getsetattr") ? { name = "mq_getsetattr" asmlinkage() mqdes = int_arg(1) u_mqstat_uaddr = pointer_arg(2) u_omqstat_uaddr = pointer_arg(3) argstr = sprintf("%d, %p, %p", mqdes, u_mqstat_uaddr, u_omqstat_uaddr) } probe __nd_syscall.mq_getsetattr = kprobe.function("sys_mq_getsetattr") { @__syscall_gate(%{ __NR_mq_getsetattr %}) } probe nd_syscall.mq_getsetattr.return = __nd_syscall.mq_getsetattr.return ?, kprobe.function("compat_sys_mq_getsetattr").return ? { name = "mq_getsetattr" retstr = returnstr(1) } probe __nd_syscall.mq_getsetattr.return = kprobe.function("sys_mq_getsetattr").return { @__syscall_gate(%{ __NR_mq_getsetattr %}) } # mq_notify __________________________________________________ # long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification) # long compat_sys_mq_notify(mqd_t mqdes, const struct compat_sigevent __user *u_notification) # probe nd_syscall.mq_notify = __nd_syscall.mq_notify ?, kprobe.function("compat_sys_mq_notify") ? { name = "mq_notify" asmlinkage() mqdes = int_arg(1) notification_uaddr = pointer_arg(2) argstr = sprintf("%d, %p", mqdes, notification_uaddr) } probe __nd_syscall.mq_notify = kprobe.function("sys_mq_notify") { @__syscall_gate(%{ __NR_mq_notify %}) } probe nd_syscall.mq_notify.return = __nd_syscall.mq_notify.return ?, kprobe.function("compat_sys_mq_notify").return ? { name = "mq_notify" retstr = returnstr(1) } probe __nd_syscall.mq_notify.return = kprobe.function("sys_mq_notify").return { @__syscall_gate(%{ __NR_mq_notify %}) } # mq_open ____________________________________________________ # long sys_mq_open(const char __user *u_name, # int oflag, # mode_t mode, # struct mq_attr __user *u_attr) # long compat_sys_mq_open(const char __user *u_name, # int oflag, compat_mode_t mode, # struct compat_mq_attr __user *u_attr) # probe nd_syscall.mq_open = __nd_syscall.mq_open, __nd_syscall.compat_mq_open ? { asmlinkage() name = "mq_open" name_uaddr = pointer_arg(1) filename = user_string_quoted(name_uaddr) u_attr_uaddr = pointer_arg(4) oflag = int_arg(2) if (oflag & 64) argstr = sprintf("%s, %s, %#o, %p", user_string_quoted(name_uaddr), _sys_open_flag_str(oflag), mode, u_attr_uaddr) else argstr = sprintf("%s, %s", user_string_quoted(name_uaddr), _sys_open_flag_str(oflag)) } probe __nd_syscall.mq_open = kprobe.function("sys_mq_open") { asmlinkage() @__syscall_gate(%{ __NR_mq_open %}) %( CONFIG_64BIT == "y" %? mode = uint_arg(3) %: mode = (uint_arg(3) & 0xffff) %) } probe __nd_syscall.compat_mq_open = kprobe.function("compat_sys_mq_open") { asmlinkage() mode = (uint_arg(3) & 0xffff) } probe nd_syscall.mq_open.return = __nd_syscall.mq_open.return ?, kprobe.function("compat_sys_mq_open").return ? { name = "mq_open" retstr = returnstr(1) } probe __nd_syscall.mq_open.return = kprobe.function("sys_mq_open").return { @__syscall_gate(%{ __NR_mq_open %}) } # mq_timedreceive ____________________________________________ # ssize_t sys_mq_timedreceive(mqd_t mqdes, # char __user *u_msg_ptr, # size_t msg_len, # unsigned int __user *u_msg_prio, # const struct timespec __user *u_abs_timeout) # ssize_t compat_sys_mq_timedreceive(mqd_t mqdes, # char __user *u_msg_ptr, # size_t msg_len, unsigned int __user *u_msg_prio, # const struct compat_timespec __user *u_abs_timeout) # probe nd_syscall.mq_timedreceive = __nd_syscall.mq_timedreceive ?, __nd_syscall.compat_mq_timedreceive ? { name = "mq_timedreceive" asmlinkage() mqdes = int_arg(1) msg_ptr_uaddr = pointer_arg(2) msg_prio_uaddr = pointer_arg(4) abs_timeout_uaddr = pointer_arg(5) argstr = sprintf("%d, %p, %u, %p, %p", mqdes, msg_ptr_uaddr, msg_len, msg_prio_uaddr, abs_timeout_uaddr) } probe __nd_syscall.compat_mq_timedreceive = kprobe.function("compat_sys_mq_timedreceive") { asmlinkage() msg_len = uint_arg(3) } probe __nd_syscall.mq_timedreceive = kprobe.function("sys_mq_timedreceive") { asmlinkage() @__syscall_gate(%{ __NR_mq_timedreceive %}) %( CONFIG_64BIT == "y" %? msg_len = ulong_arg(3) %: msg_len = uint_arg(3) %) } probe nd_syscall.mq_timedreceive.return = __nd_syscall.mq_timedreceive.return ?, kprobe.function("compat_sys_mq_timedreceive").return ? { name = "mq_timedreceive" retstr = returnstr(1) } probe __nd_syscall.mq_timedreceive.return = kprobe.function("sys_mq_timedreceive").return { @__syscall_gate(%{ __NR_mq_timedreceive %}) } # mq_timedsend _______________________________________________ # long sys_mq_timedsend(mqd_t mqdes, # const char __user *u_msg_ptr, # size_t msg_len, # unsigned int msg_prio, # const struct timespec __user *u_abs_timeout) # long compat_sys_mq_timedsend(mqd_t mqdes, # const char __user *u_msg_ptr, # size_t msg_len, unsigned int msg_prio, # const struct compat_timespec __user *u_abs_timeout) # probe nd_syscall.mq_timedsend = __nd_syscall.mq_timedsend ?, __nd_syscall.compat_mq_timedsend ? { name = "mq_timedsend" asmlinkage() mqdes = int_arg(1) msg_ptr_uaddr = pointer_arg(2) msg_prio = uint_arg(4) abs_timeout_uaddr = pointer_arg(5) argstr = sprintf("%d, %p, %u, %u, %p", mqdes, msg_ptr_uaddr, msg_len, msg_prio, abs_timeout_uaddr) } probe __nd_syscall.compat_mq_timedsend = kprobe.function("compat_sys_mq_timedsend") { asmlinkage() msg_len = uint_arg(3) } probe __nd_syscall.mq_timedsend = kprobe.function("sys_mq_timedsend") { asmlinkage() @__syscall_gate(%{ __NR_mq_timedsend %}) %( CONFIG_64BIT == "y" %? msg_len = ulong_arg(3) %: msg_len = uint_arg(3) %) } probe nd_syscall.mq_timedsend.return = __nd_syscall.mq_timedsend.return ?, kprobe.function("compat_sys_mq_timedsend").return ? { name = "mq_timedsend" retstr = returnstr(1) } probe __nd_syscall.mq_timedsend.return = kprobe.function("sys_mq_timedsend").return { @__syscall_gate(%{ __NR_mq_timedsend %}) } # mq_unlink __________________________________________________ # long sys_mq_unlink(const char __user *u_name) # probe nd_syscall.mq_unlink = kprobe.function("sys_mq_unlink") ? { name = "mq_unlink" asmlinkage() u_name_uaddr = pointer_arg(1) u_name = user_string_quoted(u_name_uaddr) argstr = user_string_quoted(u_name_uaddr) } probe nd_syscall.mq_unlink.return = kprobe.function("sys_mq_unlink").return ? { name = "mq_unlink" retstr = returnstr(1) } # mremap _____________________________________________________ # unsigned long sys_mremap(unsigned long addr, # unsigned long old_len, # unsigned long new_len, # unsigned long flags, # unsigned long new_addr) # probe nd_syscall.mremap = kprobe.function("ia64_mremap") ?, kprobe.function("sys_mremap") ? { name = "mremap" asmlinkage() old_address = ulong_arg(1) old_size = ulong_arg(2) new_size = ulong_arg(3) flags = ulong_arg(4) new_address = ulong_arg(5) argstr = sprintf("%p, %d, %d, %s, %p", old_address, old_size, new_size, _mremap_flags(flags), new_address) } probe nd_syscall.mremap.return = kprobe.function("ia64_mremap").return ?, kprobe.function("sys_mremap").return ? { name = "mremap" retstr = returnstr(2) } # msgctl _____________________________________________________ # long sys_msgctl (int msqid, int cmd, struct msqid_ds __user *buf) # probe nd_syscall.msgctl = kprobe.function("sys_msgctl") ? { @__syscall_gate2(%{ __NR_msgctl %}, %{ __NR_ipc %}) name = "msgctl" asmlinkage() msqid = int_arg(1) cmd = int_arg(2) cmd_str = _stp_msgctl_cmd_str(cmd) buf_uaddr = pointer_arg(3) argstr = sprintf("%d, %s, %p", msqid, cmd_str, buf_uaddr) } probe nd_syscall.msgctl.return = kprobe.function("sys_msgctl").return ? { @__syscall_gate2(%{ __NR_msgctl %}, %{ __NR_ipc %}) name = "msgctl" retstr = returnstr(1) } # compat_sys_msgctl ________________________________________ # # long compat_sys_msgctl(int first, int second, void __user *uptr) # ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC # COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, # u32, third, compat_uptr_t, ptr, u32, fifth) # endif # probe nd_syscall.compat_sys_msgctl = __nd_syscall.compat_msgctl ?, __nd_syscall.compat_ipc.msgctl ? { name = "msgctl" asmlinkage() cmd_str = _stp_msgctl_cmd_str(cmd) argstr = sprintf("%d, %s, %p", msqid, cmd_str, buf_uaddr) } probe __nd_syscall.compat_msgctl = kprobe.function("compat_sys_msgctl") ? { asmlinkage() msqid = int_arg(1) cmd = int_arg(2) buf_uaddr = pointer_arg(3) } probe __nd_syscall.compat_ipc.msgctl = kprobe.function("compat_sys_ipc") ? { asmlinkage() if ((uint_arg(1) & 0xffff) != %{ MSGCTL %}) next; msqid = int_arg(2) cmd = int_arg(3) buf_uaddr = pointer_arg(5) } probe nd_syscall.compat_sys_msgctl.return = kprobe.function("compat_sys_msgctl").return ?, __nd_syscall.compat_ipc.msgctl.return ? { name = "msgctl" retstr = returnstr(1) } probe __nd_syscall.compat_ipc.msgctl.return = kprobe.function("compat_sys_ipc").return ? { if ((@entry(__asmlinkage_int_arg(1)) & 0xffff) != %{ MSGCTL %}) next; } # msgget _____________________________________________________ # long sys_msgget (key_t key, int msgflg) # probe nd_syscall.msgget = kprobe.function("sys_msgget") ? { name = "msgget" asmlinkage() key = int_arg(1) key_str = _stp_msgget_key_str(key) msgflg = int_arg(2) msgflg_str = __sem_flags(msgflg) argstr = sprintf("%s, %s", key_str, msgflg_str) } probe nd_syscall.msgget.return = kprobe.function("sys_msgget").return ? { name = "msgget" retstr = returnstr(1) } # msgrcv _____________________________________________________ # long sys_msgrcv (int msqid, # struct msgbuf __user *msgp, # size_t msgsz, # long msgtyp, # int msgflg) # probe nd_syscall.msgrcv = kprobe.function("sys_msgrcv") ? { name = "msgrcv" asmlinkage() msqid = int_arg(1) msgp_uaddr = pointer_arg(2) msgsz = ulong_arg(3) msgtyp = long_arg(4) msgflg = int_arg(5) msgflg_str = _stp_msgflg_str(msgflg) argstr = sprintf("%d, %p, %u, %d, %s", msqid, msgp_uaddr, msgsz, msgtyp, msgflg_str) } probe nd_syscall.msgrcv.return = kprobe.function("sys_msgrcv").return ? { name = "msgrcv" retstr = returnstr(1) } # compat_sys_msgrcv ________________________________________ # # kernels < 3.15: # long compat_sys_msgrcv(int first, int second, int msgtyp, int third, # int version, void __user *uptr) # # kernels >= 3.15: # COMPAT_SYSCALL_DEFINE5(msgrcv, int, msqid, compat_uptr_t, msgp, # compat_ssize_t, msgsz, compat_long_t, msgtyp, int, msgflg) # ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC # COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, # u32, third, compat_uptr_t, ptr, u32, fifth) # endif # probe nd_syscall.compat_sys_msgrcv = __nd_syscall.compat_msgrcv ?, __nd_syscall.compat_ipc.msgrcv ? { name = "msgrcv" msgflg_str = _stp_msgflg_str(msgflg) argstr = sprintf("%d, %p, %u, %d, %s", msqid, msgp_uaddr, msgsz, msgtyp, msgflg_str) } probe __nd_syscall.compat_msgrcv = kprobe.function("compat_sys_msgrcv") ? { asmlinkage() msqid = int_arg(1) %(kernel_v >= "3.15.0" %? msgp_uaddr = pointer_arg(2) msgsz = uint_arg(3) msgtyp = long_arg(4) msgflg = int_arg(5) %: __version = int_arg(5) __uptr = pointer_arg(6) msgp_uaddr = _stp_compat_msgrcv_msgbuf(__uptr, __version) msgtyp = _stp_compat_msgrcv_msgtyp(__uptr, __version, int_arg(3)) msgsz = uint_arg(2) msgflg = int_arg(4) %) } probe __nd_syscall.compat_ipc.msgrcv = kprobe.function("compat_sys_ipc") ? { asmlinkage() if ((uint_arg(1) & 0xffff) != %{ MSGRCV %}) next; msqid = int_arg(2) msgsz = uint_arg(3) msgflg = int_arg(4) # __version isn't quite correct (it should be shifted down 16 # bits), but all we really need is zero/non-zero. __version = uint_arg(1) & 0xffff0000 __uptr = pointer_arg(5) msgp_uaddr = _stp_compat_msgrcv_msgbuf(__uptr, __version) msgtyp = _stp_compat_msgrcv_msgtyp(__uptr, __version, int_arg(6)) } probe nd_syscall.compat_sys_msgrcv.return = kprobe.function("compat_sys_msgrcv").return ?, __nd_syscall.compat_ipc.msgrcv.return ? { name = "msgrcv" retstr = returnstr(1) } probe __nd_syscall.compat_ipc.msgrcv.return = kprobe.function("compat_sys_ipc").return ? { if ((@entry(__asmlinkage_int_arg(1)) & 0xffff) != %{ MSGRCV %}) next; } # msgsnd _____________________________________________________ # long sys_msgsnd (int msqid, # struct msgbuf __user *msgp, # size_t msgsz, # int msgflg) # probe nd_syscall.msgsnd = kprobe.function("sys_msgsnd") ? { name = "msgsnd" asmlinkage() msqid = int_arg(1) msgp_uaddr = pointer_arg(2) msgsz = ulong_arg(3) msgflg = int_arg(4) msgflg_str = _stp_msgflg_str(msgflg) argstr = sprintf("%d, %p, %u, %s", msqid, msgp_uaddr, msgsz, msgflg_str) } probe nd_syscall.msgsnd.return = kprobe.function("sys_msgsnd").return ? { name = "msgsnd" retstr = returnstr(1) } # compat_sys_msgsnd ________________________________________ # # long compat_sys_msgsnd(int first, int second, int third, void __user *uptr) # probe nd_syscall.compat_sys_msgsnd = __nd_syscall.compat_msgsnd ?, __nd_syscall.compat_ipc.msgsnd ? { name = "msgsnd" msgflg_str = _stp_msgflg_str(msgflg) argstr = sprintf("%d, %p, %u, %s", msqid, msgp_uaddr, msgsz, msgflg_str) } probe __nd_syscall.compat_msgsnd = kprobe.function("compat_sys_msgsnd") ? { asmlinkage() msqid = int_arg(1) msgsz = uint_arg(2) msgflg = int_arg(3) msgp_uaddr = pointer_arg(4) } probe __nd_syscall.compat_ipc.msgsnd = kprobe.function("compat_sys_ipc") ? { asmlinkage() if ((uint_arg(1) & 0xffff) != %{ MSGSND %}) next; msqid = int_arg(2) msgsz = uint_arg(3) msgflg = int_arg(4) msgp_uaddr = pointer_arg(5) } probe nd_syscall.compat_sys_msgsnd.return = kprobe.function("compat_sys_msgsnd").return ?, __nd_syscall.compat_ipc.msgsnd.return ? { name = "msgsnd" retstr = returnstr(1) } probe __nd_syscall.compat_ipc.msgsnd.return = kprobe.function("compat_sys_ipc").return ? { if ((@entry(__asmlinkage_int_arg(1)) & 0xffff) != %{ MSGSND %}) next; } # msync ______________________________________________________ # long sys_msync(unsigned long start, size_t len, int flags) probe nd_syscall.msync = kprobe.function("sys_msync") ? { name = "msync" asmlinkage() start = ulong_arg(1) length = ulong_arg(2) flags = int_arg(3) argstr = sprintf("%p, %u, %s", start, length, _msync_flag_str(flags)) } probe nd_syscall.msync.return = kprobe.function("sys_msync").return ? { name = "msync" retstr = returnstr(1) } # munlock ____________________________________________________ # long sys_munlock(unsigned long start, size_t len) probe nd_syscall.munlock = kprobe.function("sys_munlock") ? { name = "munlock" asmlinkage() addr = ulong_arg(1) len = ulong_arg(2) argstr = sprintf("%p, %d", addr, len) } probe nd_syscall.munlock.return = kprobe.function("sys_munlock").return ? { name = "munlock" retstr = returnstr(1) } # munlockall _________________________________________________ # long sys_munlockall(void) probe nd_syscall.munlockall = kprobe.function("sys_munlockall") ? { name = "munlockall" argstr = "" } probe nd_syscall.munlockall.return = kprobe.function("sys_munlockall").return ? { name = "munlockall" retstr = returnstr(1) } # munmap _____________________________________________________ # long sys_munmap(unsigned long addr, size_t len) probe nd_syscall.munmap = kprobe.function("sys_munmap") ? { name = "munmap" asmlinkage() start = ulong_arg(1) length = ulong_arg(2) argstr = sprintf("%p, %u", start, length) } probe nd_syscall.munmap.return = kprobe.function("sys_munmap").return ? { name = "munmap" retstr = returnstr(1) }y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`