diff options
-rw-r--r-- | tapset/ChangeLog | 32 | ||||
-rw-r--r-- | tapset/aux_syscalls.stp | 139 | ||||
-rw-r--r-- | tapset/ppc64/syscalls.stp | 137 | ||||
-rw-r--r-- | tapset/syscalls.stp | 76 | ||||
-rw-r--r-- | tapset/syscalls2.stp | 140 |
5 files changed, 250 insertions, 274 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog index 5d388a72..4f347639 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,3 +1,35 @@ +2007-08-22 Martin Hunt <hunt@redhat.com> + + * aux_syscalls.stp (_utimensat_flag_str): New. + (_dfd_str): New. + (_struct_timeval2_u): Deleted. + (_struct_timeval_u): Take a number of structs to decode. + (_struct_compat_timeval2_u): Deleted + (_struct_compat_timeval_u): Take a number of structs to decode. + (_struct_timespec_u): Take a number of structs to decode. + Recognize UTIME_NOW and UTIME_OMIT. + (_struct_compat_timespec_u): Ditto. + + * syscalls.stp (compat_sys_old_getrlimit): Removed. + (sys_migrate_pages): New. + (sys_move_pages): New. + + * syscalls2.stp (compat_sys_sigprocmask): Removed. Calls + sys_sigprocmask. + (compat_sys_sysinfo): New. + (compat_sys_rt_sigtimedwait): New. + (sys_utimensat, compat_sys_utimensat): New. + + * ppc64/syscalls.stp (compat_sys_sigpending): Removed. + Calls sys_ func. + (compat_sys_setrlimit): Ditto. + (compat_sys_getrlimit): Ditto. + (compat_sys_old_getrlimit): Ditto. + (compat_sys_getrusage): Ditto. + (compat_sys_wait4): Ditto. + (compat_sys_sched_setaffinity): Ditto. + (compat_sys_sched_getaffinity): Ditto. + 2007-08-22 Wenji Huang <wenji.huang@oracle.com> * nfsd.stp (nfsd.proc?.*): Modify evaluating client_ip diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp index f8928fd0..c7cc06de 100644 --- a/tapset/aux_syscalls.stp +++ b/tapset/aux_syscalls.stp @@ -2,67 +2,46 @@ # Given a userspace pointer to a timeval, # copy and decode it and return a string. # -function _struct_timeval2_u:string(uaddr:long) +function _struct_timeval_u:string(uaddr:long, n:long) %{ /* pure */ - struct timeval tv[2]; + int n = (int)THIS->n; + struct timeval tv[n]; char *ptr = (char *)(unsigned long)THIS->uaddr; - - if (ptr == NULL) - strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); - else { - if(_stp_copy_from_user((char*)&tv,ptr,2*sizeof(struct timeval)) == 0) - snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld][%ld.%.06ld]", - tv[0].tv_sec, tv[0].tv_usec, tv[1].tv_sec, tv[1].tv_usec); - else - strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); - } -%} - -function _struct_timeval_u:string(uaddr:long) -%{ /* pure */ - struct timeval tv; - char *ptr = (char *)(unsigned long)THIS->uaddr; - - if (ptr == NULL) + + if (ptr == NULL || n > 2) strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); else { - if(_stp_copy_from_user((char*)&tv,ptr,sizeof(struct timeval)) == 0) - snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", tv.tv_sec, tv.tv_usec); - else + if(_stp_copy_from_user((char*)&tv, ptr, n*sizeof(struct timeval)) == 0) { + if (n == 2) + snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld][%ld.%.06ld]", + tv[0].tv_sec, tv[0].tv_usec, tv[1].tv_sec, tv[1].tv_usec); + else + snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", tv[0].tv_sec, tv[0].tv_usec); + } else strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); } %} -function _struct_compat_timeval_u:string(uaddr:long) +function _struct_compat_timeval_u:string(uaddr:long, n:long) %{ /* pure */ - struct compat_timeval tv; + int n = (int)THIS->n; + struct compat_timeval tv[n]; char *ptr = (char *)(unsigned long)THIS->uaddr; - if (ptr == NULL) + if (ptr == NULL || n > 2) strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); else { - if(_stp_copy_from_user((char*)&tv,ptr,sizeof(struct compat_timeval)) == 0) - snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", (long)tv.tv_sec, (long)tv.tv_usec); + if(_stp_copy_from_user((char*)&tv, ptr, n*sizeof(struct compat_timeval)) == 0) + if (n == 2) + snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld][%ld.%.06ld]", + (long)tv[0].tv_sec, (long)tv[0].tv_usec, (long)tv[1].tv_sec, (long)tv[1].tv_usec); + else + snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", (long)tv.tv_sec, (long)tv.tv_usec); else strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); } %} -function _struct_compat_timeval2_u:string(uaddr:long) -%{ /* pure */ - struct compat_timeval tv[2]; - char *ptr = (char *)(unsigned long)THIS->uaddr; - - if (ptr == NULL) - strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); - else { - if(_stp_copy_from_user((char*)&tv,ptr,2*sizeof(struct compat_timeval)) == 0) - snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld][%ld.%.06ld]", - (long)tv[0].tv_sec, (long)tv[0].tv_usec, (long)tv[1].tv_sec, (long)tv[1].tv_usec); - else - strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); - } -%} function _struct_timeval:string(addr:long) %{ /* pure */ @@ -163,34 +142,69 @@ function _struct_compat_utimbuf_u:string(uaddr:long) } %} -function _struct_timespec_u:string(uaddr:long) +%{ +#define STP_UTIME_NOW ((1l << 30) - 1l) +#define STP_UTIME_OMIT ((1l << 30) - 2l) +%} + +function _struct_timespec_u:string(uaddr:long, n:long) %{ /* pure */ - struct timespec ts; + int n = (int)THIS->n; + struct timespec ts[n]; char *ptr = (char *)(unsigned long)THIS->uaddr; - if (ptr == NULL) + if (ptr == NULL || n > 2) strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); else { - if(_stp_copy_from_user((char *)&ts,ptr,sizeof(struct timespec))) { + if(_stp_copy_from_user((char *)&ts, ptr, n*sizeof(struct timespec))) { strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); - } else - snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%09ld]", - (unsigned long)ts.tv_sec, (unsigned long)ts.tv_nsec); + } else { + char *str; + int len, i = 0; + ptr = THIS->__retvalue; + while (i < n) { + str = NULL; + if (ts[i].tv_nsec == STP_UTIME_NOW) + str = "UTIME_NOW"; + else if (ts[i].tv_nsec == STP_UTIME_OMIT) + str = "UTIME_OMIT"; + if (str) + len = snprintf(ptr, MAXSTRINGLEN, "[%s]", str); + else + len = snprintf(ptr, MAXSTRINGLEN, "[%ld.%09ld]", (long)ts[i].tv_sec, ts[i].tv_nsec); + ptr += len; i++; + } + } } %} -function _struct_compat_timespec_u:string(uaddr:long) +function _struct_compat_timespec_u:string(uaddr:long, n:long) %{ /* pure */ - struct compat_timespec ts; + int n = (int)THIS->n; + struct compat_timespec ts[n]; char *ptr = (char *)(unsigned long)THIS->uaddr; - if (ptr == NULL) + if (ptr == NULL || n > 2) strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); else { - if(_stp_copy_from_user((char *)&ts,ptr,sizeof(struct compat_timespec))) { + if(_stp_copy_from_user((char *)&ts, ptr, n*sizeof(struct compat_timespec))) { strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); - } else - snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%09ld]", - (unsigned long)ts.tv_sec, (unsigned long)ts.tv_nsec); + } else { + char *str; + int len, i = 0; + ptr = THIS->__retvalue; + while (i < n) { + str = NULL; + if (ts[i].tv_nsec == STP_UTIME_NOW) + str = "UTIME_NOW"; + else if (ts[i].tv_nsec == STP_UTIME_OMIT) + str = "UTIME_OMIT"; + if (str) + len = snprintf(ptr, MAXSTRINGLEN, "[%s]", str); + else + len = snprintf(ptr, MAXSTRINGLEN, "[%ld.%09ld]", (long)ts[i].tv_sec, ts[i].tv_nsec); + ptr += len; i++; + } + } } %} @@ -1715,3 +1729,14 @@ function get_mmap_args:string (args:long) strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); } %} + +# For utimensat and futimesat, the directory fd can have a special value +function _dfd_str(d) { + if(d == -100) return "AT_FDCWD" + return sprint(d) +} + +function _utimensat_flag_str(f) { + if (f == 0x100) return "AT_SYMLINK_NOFOLLOW" + return sprintf("0x%x", f) +} diff --git a/tapset/ppc64/syscalls.stp b/tapset/ppc64/syscalls.stp index 7c7a6d7b..57267ccd 100644 --- a/tapset/ppc64/syscalls.stp +++ b/tapset/ppc64/syscalls.stp @@ -1,20 +1,5 @@ # PPC64-specific system calls -# compat_sys_sigpending ________________________________________ -# -# asmlinkage long compat_sys_sigpending(compat_old_sigset_t __user *set) -# -probe syscall.compat_sys_sigpending = kernel.function("compat_sys_sigpending") { - name = "compat_sys_sigpending" - set_uaddr = $set - argstr = sprintf("%p", set_uaddr) -} -probe syscall.compat_sys_sigpending.return = - kernel.function("compat_sys_sigpending").return { - name = "compat_sys_sigpending" - retstr = returnstr(1) -} - # compat_sys_futex ________________________________________ # # asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, int val, @@ -37,128 +22,6 @@ probe syscall.compat_sys_futex.return = name = "compat_sys_futex" retstr = returnstr(1) } -# compat_sys_setrlimit ________________________________________ -# -# asmlinkage long compat_sys_setrlimit(unsigned int resource, -# struct compat_rlimit __user *rlim) -# -probe syscall.compat_sys_setrlimit = kernel.function("compat_sys_setrlimit") { - name = "compat_sys_setrlimit" - resource = $resource - rlim_uaddr = $rlim - argstr = sprintf("%s, %s", _rlimit_resource_str($resource), - _struct_rlimit_u($rlim)) -} -probe syscall.compat_sys_setrlimit.return = - kernel.function("compat_sys_setrlimit").return { - name = "compat_sys_setrlimit" - retstr = returnstr(1) -} -# compat_sys_old_getrlimit ________________________________________ -# -# asmlinkage long compat_sys_old_getrlimit(unsigned int resource, -# struct compat_rlimit __user *rlim) -# -probe syscall.compat_sys_old_getrlimit = - kernel.function("compat_sys_old_getrlimit") { - name = "compat_sys_old_getrlimit" - resource = $resource - rlim_uaddr = $rlim - argstr = sprintf("%s, %s", _rlimit_resource_str($resource), - _struct_rlimit_u($rlim)) -} -probe syscall.compat_sys_old_getrlimit.return = - kernel.function("compat_sys_old_getrlimit").return { - name = "compat_sys_old_getrlimit" - retstr = returnstr(1) -} -# compat_sys_getrlimit ________________________________________ -# -# asmlinkage long compat_sys_getrlimit (unsigned int resource, -# struct compat_rlimit __user *rlim) -# -probe syscall.compat_sys_getrlimit = kernel.function("compat_sys_getrlimit") { - name = "compat_sys_getrlimit" - resource = $resource - rlim_uaddr = $rlim - argstr = sprintf("%s, %s", _rlimit_resource_str($resource), - _struct_rlimit_u($rlim)) -} -probe syscall.compat_sys_getrlimit.return = - kernel.function("compat_sys_getrlimit").return { - name = "compat_sys_getrlimit" - retstr = returnstr(1) -} -# compat_sys_getrusage ________________________________________ -# -# asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru) -# -probe syscall.compat_sys_getrusage = kernel.function("compat_sys_getrusage") { - name = "compat_sys_getrusage" - who = $who - usage_uaddr = $ru - argstr = sprintf("%s, %p",_rusage_who_str($who), usage_uaddr) -} -probe syscall.compat_sys_getrusage.return = - kernel.function("compat_sys_getrusage").return { - name = "compat_sys_getrusage" - retstr = returnstr(1) -} -# compat_sys_wait4 ________________________________________ -# -# long compat_sys_wait4(compat_pid_t pid, compat_uint_t __user *stat_addr, -# int options, struct compat_rusage __user *ru) -# -probe syscall.compat_sys_wait4 = kernel.function("compat_sys_wait4") { - name = "compat_sys_wait4" - pid = $pid - status_uaddr = $stat_addr - options = $options - rusage_uaddr = $ru - argstr = sprintf("%d, %p, %s, %p", $pid, status_uaddr, - _wait4_opt_str($options), rusage_uaddr) -} -probe syscall.compat_sys_wait4.return = - kernel.function("compat_sys_wait4").return { - name = "compat_sys_wait4" - retstr = returnstr(1) -} -# compat_sys_sched_setaffinity ________________________________________ -# -# asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid, -# unsigned int len, -# compat_ulong_t __user *user_mask_ptr) -# -probe syscall.compat_sys_sched_setaffinity = kernel.function("compat_sys_sched_setaffinity") { - name = "compat_sys_sched_setaffinity" - pid = $pid - len = $len - mask_uaddr = $user_mask_ptr - argstr = sprintf("%d, %d, %p", pid, len, mask_uaddr) -} -probe syscall.compat_sys_sched_setaffinity.return = - kernel.function("compat_sys_sched_setaffinity").return { - name = "compat_sys_sched_setaffinity" - retstr = returnstr(1) -} -# compat_sys_sched_getaffinity ________________________________________ -# -# asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid, -# unsigned int len, -# compat_ulong_t __user *user_mask_ptr) -# -probe syscall.compat_sys_sched_getaffinity = kernel.function("compat_sys_sched_getaffinity") { - name = "compat_sys_sched_getaffinity" - pid = $pid - len = $len - mask_uaddr = $user_mask_ptr - argstr = sprintf("%d, %d, %p", pid, len, mask_uaddr) -} -probe syscall.compat_sys_sched_getaffinity.return = - kernel.function("compat_sys_sched_getaffinity").return { - name = "compat_sys_sched_getaffinity" - retstr = returnstr(1) -} # compat_sys_newlstat ________________________________________ # # asmlinkage long compat_sys_newlstat(char __user * filename, diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp index bcc7a21d..d08be0a8 100644 --- a/tapset/syscalls.stp +++ b/tapset/syscalls.stp @@ -321,23 +321,16 @@ probe syscall.clock_getres.return = # clock_gettime ______________________________________________ # long sys_clock_gettime(clockid_t which_clock, struct timespec __user *tp) -# long compat_clock_gettime(clockid_t which_clock, struct compat_timespec __user *tp) -# long compat_sys_clock_gettime(clockid_t which_clock,struct compat_timespec __user *tp) # probe syscall.clock_gettime = - kernel.function("sys_clock_gettime"), - kernel.function("compat_clock_gettime") ?, - kernel.function("compat_sys_clock_gettime") ? + kernel.function("sys_clock_gettime") { name = "clock_gettime" clk_id = $which_clock clk_id_str = _get_wc_str($which_clock) argstr = sprintf("%s, %p", _get_wc_str($which_clock), $tp) } -probe syscall.clock_gettime.return = - kernel.function("sys_clock_gettime").return, - kernel.function("compat_clock_gettime").return ?, - kernel.function("compat_sys_clock_gettime").return ? +probe syscall.clock_gettime.return = kernel.function("sys_clock_gettime").return { name = "clock_gettime" retstr = returnstr(1) @@ -356,7 +349,7 @@ probe syscall.clock_nanosleep = kernel.function("sys_clock_nanosleep") { else flag_str = sprintf("0x%x", $flags) argstr = sprintf("%s, %s, %s, %p", _get_wc_str($which_clock), flag_str, - _struct_timespec_u($rqtp), $rmtp) + _struct_timespec_u($rqtp,1), $rmtp) } probe syscall.clock_nanosleep.return = kernel.function("sys_clock_nanosleep").return { name = "clock_nanosleep" @@ -378,7 +371,7 @@ probe syscall.compat_clock_nanosleep = else flag_str = sprintf("0x%x", $flags) argstr = sprintf("%s, %s, %s, %p", _get_wc_str($which_clock), flag_str, - _struct_compat_timespec_u($rqtp), $rmtp) + _struct_compat_timespec_u($rqtp,1), $rmtp) } probe syscall.compat_clock_nanosleep.return = kernel.function("compat_clock_nanosleep").return ?, @@ -397,7 +390,7 @@ probe syscall.clock_settime = kernel.function("sys_clock_settime") { clk_id = $which_clock clk_id_str = _get_wc_str($which_clock) tp_uaddr = $tp - argstr = sprintf("%s, %s", clk_id_str, _struct_timespec_u($tp)) + argstr = sprintf("%s, %s", clk_id_str, _struct_timespec_u($tp,1)) } probe syscall.clock_settime.return = kernel.function("sys_clock_settime").return { name = "clock_settime" @@ -1020,7 +1013,7 @@ probe syscall.futex = kernel.function("sys_futex") { val3 = $val3 if (op == 0) argstr = sprintf("%p, %s, %d, %s", $uaddr, _futex_op_str($op), - $val, _struct_timespec_u($utime)) + $val, _struct_timespec_u($utime,1)) else argstr = sprintf("%p, %s, %d", $uaddr, _futex_op_str($op), $val) @@ -1043,7 +1036,7 @@ probe syscall.futimesat = kernel.function("sys_futimesat") ? { filename = user_string($filename) tvp_uaddr = $utimes argstr = sprintf("%d, %s, %s", $dfd, user_string_quoted($filename), - _struct_timeval2_u($utimes)) + _struct_timeval_u($utimes, 2)) } probe syscall.compat_futimesat = kernel.function("compat_sys_futimesat") ? { name = "futimesat" @@ -1052,7 +1045,7 @@ probe syscall.compat_futimesat = kernel.function("compat_sys_futimesat") ? { filename = user_string($filename) tvp_uaddr = $t argstr = sprintf("%d, %s, %s", $dfd, user_string_quoted($filename), - _struct_compat_timeval2_u($t)) + _struct_compat_timeval_u($t, 2)) } probe syscall.futimesat.return = kernel.function("sys_futimesat").return ? { name = "futimesat" @@ -1244,11 +1237,10 @@ probe syscall.get_mempolicy = kernel.function("sys_get_mempolicy") ? { maxnode = $maxnode addr = $addr flags = $flags - argstr = sprintf("%p, %p, %d, %p, %d", policy_uaddr, - nmask_uaddr, $maxnode, $addr, $flags) + argstr = sprintf("%p, %p, %d, %p, 0x%x", $policy, + $nmask, $maxnode, $addr, $flags) } -probe syscall.get_mempolicy.return = - kernel.function("sys_get_mempolicy").return ? { +probe syscall.get_mempolicy.return = kernel.function("sys_get_mempolicy").return ? { name = "get_mempolicy" retstr = returnstr(1) } @@ -1376,22 +1368,19 @@ probe syscall.getresuid.return = # 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_old_getrlimit(unsigned int resource, struct compat_rlimit __user *rlim) # long compat_sys_getrlimit (unsigned int resource, struct compat_rlimit __user *rlim) probe syscall.getrlimit = kernel.function("sys_getrlimit"), kernel.function("sys_old_getrlimit") ?, - kernel.function("compat_sys_getrlimit") ?, - kernel.function("compat_sys_old_getrlimit") ? + kernel.function("compat_sys_getrlimit") ? { name = "getrlimit" resource = $resource rlim_uaddr = $rlim - argstr = sprintf("%s, %p", _rlimit_resource_str($resource), rlim_uaddr) + argstr = sprintf("%s, %p", _rlimit_resource_str($resource), $rlim) } probe syscall.getrlimit.return = kernel.function("sys_getrlimit").return, kernel.function("sys_old_getrlimit").return ?, - kernel.function("compat_sys_getrlimit").return ?, - kernel.function("compat_sys_old_getrlimit").return ? + kernel.function("compat_sys_getrlimit").return ? { name = "getrlimit" retstr = returnstr(1) @@ -1681,7 +1670,7 @@ probe syscall.io_getevents = nr = $nr events_uaddr = $events timeout_uaddr = $timeout - timestr = _struct_timespec_u($timeout) + timestr = _struct_timespec_u($timeout,1) argstr = sprintf("%d, %d, %d, %p, %p, %s", $ctx_id, $min_nr, $nr, $events, $timeout, timestr) } @@ -2017,7 +2006,8 @@ probe syscall.lremovexattr.return = kernel.function("sys_lremovexattr").return { probe syscall.lseek = kernel.function("sys_lseek") { name = "lseek" fildes = $fd - offset = __int32($offset) +# offset = __int32($offset) + offset = $offset whence = $origin whence_str = _seek_whence_str($origin) argstr = sprintf("%d, %d, %s", $fd, offset, whence_str) @@ -2119,14 +2109,27 @@ probe syscall.mbind = kernel.function("sys_mbind") ? { nmask_uaddr = $nmask maxnode = $maxnode flags = $flags - argstr = sprintf("%d, %d, %d, %p, %d, %d", $start, $len, $mode, - nmask_uaddr, $maxnode, $flags) + argstr = sprintf("%d, %d, %d, %p, %d, 0x%x", $start, $len, $mode, + $nmask, $maxnode, $flags) } probe syscall.mbind.return = kernel.function("sys_mbind").return ? { name = "mbind" 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 syscall.migrate_pages = kernel.function("sys_migrate_pages") ? { + name = "migrate_pages" + argstr = sprintf("%d, %d, %p, %p", $pid, $maxnode, $old_nodes, $new_nodes) +} +probe syscall.migrate_pages.return = kernel.function("sys_migrate_pages").return ? { + name = "migrate_pages" + retstr = returnstr(1) +} + # mincore ____________________________________________________ # long sys_mincore(unsigned long start, size_t len, unsigned char __user * vec) # @@ -2229,6 +2232,21 @@ probe syscall.modify_ldt.return = kernel.function("sys_modify_ldt").return ? { 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) +# +probe syscall.move_pages = kernel.function("sys_move_pages") ? { + name = "move_pages" + argstr = sprintf("%d, %d, %p, %p, 0x%x", $pid, $nr_pages, $nodes, $status, $flags) +} +probe syscall.move_pages.return = kernel.function("sys_move_pages").return ? { + name = "move_pages" + retstr = returnstr(1) +} + # mount ______________________________________________________ # long sys_mount(char __user * dev_name, # char __user * dir_name, diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp index fc9662c7..6606624c 100644 --- a/tapset/syscalls2.stp +++ b/tapset/syscalls2.stp @@ -32,7 +32,7 @@ probe syscall.nanosleep = kernel.function("sys_nanosleep") { name = "nanosleep" req_uaddr = $rqtp rem_uaddr = $rmtp - argstr = sprintf("%s, %p", _struct_timespec_u($rqtp), $rmtp) + argstr = sprintf("%s, %p", _struct_timespec_u($rqtp,1), $rmtp) } probe syscall.nanosleep.return = kernel.function("sys_nanosleep").return { name = "nanosleep" @@ -42,7 +42,7 @@ probe syscall.compat_nanosleep = kernel.function("compat_sys_nanosleep") ? { name = "nanosleep" req_uaddr = $rqtp rem_uaddr = $rmtp - argstr = sprintf("%s, %p", _struct_compat_timespec_u($rqtp), $rmtp) + argstr = sprintf("%s, %p", _struct_compat_timespec_u($rqtp,1), $rmtp) } probe syscall.compat_nanosleep.return = kernel.function("compat_sys_nanosleep").return ? { name = "nanosleep" @@ -112,10 +112,10 @@ probe syscall.open = mode = $mode if (flags & 64) argstr = sprintf("%s, %s, %#o", user_string_quoted($filename), - _sys_open_flag_str(flags), $mode) + _sys_open_flag_str($flags), $mode) else argstr = sprintf("%s, %s", user_string_quoted($filename), - _sys_open_flag_str(flags)) + _sys_open_flag_str($flags)) } probe syscall.open.return = kernel.function("sys_open").return ?, @@ -334,7 +334,7 @@ probe syscall.ppoll = kernel.function("sys_ppoll") ? { argstr = sprintf("%p, %d, %s, %p, %d", $ufds, $nfds, - _struct_timespec_u($tsp), + _struct_timespec_u($tsp,1), $sigmask, $sigsetsize) } @@ -351,7 +351,7 @@ probe syscall.compat_ppoll = kernel.function("compat_sys_ppoll") ? { argstr = sprintf("%p, %d, %s, %p, %d", $ufds, $nfds, - _struct_compat_timespec_u($tsp), + _struct_compat_timespec_u($tsp,1), $sigmask, $sigsetsize) } @@ -411,7 +411,7 @@ probe syscall.pread.return = kernel.function("sys_pread64").return { probe syscall.pselect6 = kernel.function("sys_pselect6") ? { name = "pselect6" argstr = sprintf("%d, %p, %p, %p, %s, %p", $n, $inp, $outp, $exp, - _struct_timespec_u($tsp), $sig) + _struct_timespec_u($tsp,1), $sig) } probe syscall.pselect6.return = kernel.function("sys_pselect6").return ? { name = "pselect6" @@ -420,7 +420,7 @@ probe syscall.pselect6.return = kernel.function("sys_pselect6").return ? { probe syscall.compat_pselect6 = kernel.function("compat_sys_pselect6") ? { name = "pselect6" argstr = sprintf("%d, %p, %p, %p, %s, %p", $n, $inp, $outp, $exp, - _struct_compat_timespec_u($tsp), $sig) + _struct_compat_timespec_u($tsp,1), $sig) } probe syscall.compat_pselect6.return = kernel.function("compat_sys_pselect6").return ? { name = "pselect6" @@ -436,7 +436,7 @@ probe syscall.compat_pselect6.return = kernel.function("compat_sys_pselect6").re probe syscall.pselect7 = kernel.function("sys_pselect7") ? { name = "pselect7" argstr = sprintf("%d, %p, %p, %p, %s, %p, %d", $n, $inp, $outp, $exp, - _struct_timespec_u($tsp), $sigmask, $sigsetsize) + _struct_timespec_u($tsp,1), $sigmask, $sigsetsize) } probe syscall.pselect7.return = kernel.function("sys_pselect7").return ? { name = "pselect7" @@ -445,7 +445,7 @@ probe syscall.pselect7.return = kernel.function("sys_pselect7").return ? { probe syscall.compat_pselect7a = kernel.function("compat_sys_pselect7") ? { name = "pselect7" argstr = sprintf("%d, %p, %p, %p, %s, %p, %d", $n, $inp, $outp, $exp, - _struct_compat_timespec_u($tsp), $sigmask, $sigsetsize) + _struct_compat_timespec_u($tsp,1), $sigmask, $sigsetsize) } probe syscall.compat_pselect7.return = kernel.function("compat_sys_pselect").return ? { name = "pselect7" @@ -1005,13 +1005,18 @@ probe syscall.rt_sigsuspend.return = # rt_sigtimedwait ____________________________________________ # -# asmlinkage long -# sys_rt_sigtimedwait(const sigset_t __user *uthese, -# siginfo_t __user *uinfo, -# const struct timespec __user *uts, -# size_t sigsetsize) -# -probe syscall.rt_sigtimedwait = kernel.function("sys_rt_sigtimedwait") { +# long sys_rt_sigtimedwait(const sigset_t __user *uthese, +# siginfo_t __user *uinfo, +# const struct timespec __user *uts, +# size_t sigsetsize) +# long compat_sys_rt_sigtimedwait (compat_sigset_t __user *uthese, +# struct compat_siginfo __user *uinfo, +# struct compat_timespec __user *uts, compat_size_t sigsetsize) +# +probe syscall.rt_sigtimedwait = + kernel.function("sys_rt_sigtimedwait"), + kernel.function("compat_sys_rt_sigtimedwait") ? +{ name = "rt_sigtimedwait" uthese_uaddr = $uthese uinfo_uaddr = $uinfo @@ -1020,10 +1025,13 @@ probe syscall.rt_sigtimedwait = kernel.function("sys_rt_sigtimedwait") { argstr = sprintf("%p, %p, %p, %d", $uthese, $uinfo, $uts, $sigsetsize) } probe syscall.rt_sigtimedwait.return = - kernel.function("sys_rt_sigtimedwait").return { + kernel.function("sys_rt_sigtimedwait").return, + kernel.function("compat_sys_rt_sigtimedwait").return ? +{ name = "rt_sigtimedwait" retstr = returnstr(1) } + # sched_getaffinity __________________________________________ # # asmlinkage long @@ -1118,7 +1126,7 @@ probe syscall.sched_rr_get_interval = name = "sched_rr_get_interval" pid = $pid tp_uaddr = $interval - argstr = sprintf("%d, %s", pid, _struct_timespec_u(tp_uaddr)) + argstr = sprintf("%d, %s", $pid, _struct_timespec_u($interval,1)) } probe syscall.sched_rr_get_interval.return = kernel.function("sys_sched_rr_get_interval").return { @@ -1130,6 +1138,7 @@ probe syscall.sched_rr_get_interval.return = # long sys_sched_setaffinity(pid_t pid, # unsigned int len, # unsigned long __user *user_mask_ptr) +# FIXME: why the problem with x86_64? # %( arch != "x86_64" %? probe syscall.sched_setaffinity = kernel.function("sys_sched_setaffinity") { @@ -1212,7 +1221,7 @@ probe syscall.select = kernel.function("sys_select") { exceptfds_uaddr = $exp timeout_uaddr = $tvp argstr = sprintf("%d, %p, %p, %p, %s", $n, $inp, $outp, $exp, - _struct_timeval_u($tvp)) + _struct_timeval_u($tvp, 1)) } probe syscall.select.return = kernel.function("sys_select").return { name = "select" @@ -1232,7 +1241,7 @@ probe syscall.compat_select = kernel.function("compat_sys_select") ? { exceptfds_uaddr = $exp timeout_uaddr = $tvp argstr = sprintf("%d, %p, %p, %p, %s", $n, $inp, $outp, $exp, - _struct_compat_timeval_u($tvp)) + _struct_compat_timeval_u($tvp, 1)) } probe syscall.compat_select.return = kernel.function("compat_sys_select").return ? { name = "select" @@ -1320,7 +1329,7 @@ probe syscall.semtimedop = kernel.function("sys_semtimedop") ? { nsops = $nsops timeout_uaddr = $timeout argstr = sprintf("%d, %p, %d, %s", $semid, $tsops, $nsops, - _struct_timespec_u($timeout)) + _struct_timespec_u($timeout,1)) } probe syscall.semtimedop.return = kernel.function("sys_semtimedop").return ? { name = "semtimedop" @@ -1338,7 +1347,7 @@ probe syscall.compat_sys_semtimedop = kernel.function("compat_sys_semtimedop") ? nsops = $nsops timeout_uaddr = $timeout argstr = sprintf("%d, %p, %d, %s", $semid, $tsems, $nsops, - _struct_compat_timespec_u($timeout)) + _struct_compat_timespec_u($timeout,1)) } probe syscall.compat_sys_semtimedop.return = kernel.function("compat_sys_semtimedop").return ? { name = "compat_sys_semtimedop" @@ -1618,7 +1627,7 @@ probe syscall.set_mempolicy = kernel.function("sys_set_mempolicy") ? { mode = $mode nmask_uaddr = $nmask maxnode = $maxnode - argstr = sprintf("%d, %p, %d", $mode, nmask_uaddr, $maxnode) + argstr = sprintf("%d, %p, %d", $mode, $nmask, $maxnode) } probe syscall.set_mempolicy.return = kernel.function("sys_set_mempolicy").return ? { name = "set_mempolicy" @@ -1862,7 +1871,7 @@ probe syscall.settimeofday = kernel.function("sys_settimeofday") { name = "settimeofday" tv_uaddr = $tv tz_uaddr = $tz - argstr = sprintf("%s, %s", _struct_timeval_u($tv), _struct_timezone_u($tz)) + argstr = sprintf("%s, %s", _struct_timeval_u($tv, 1), _struct_timezone_u($tz)) } probe syscall.settimeofday.return = kernel.function("sys_settimeofday").return { name = "settimeofday" @@ -1879,7 +1888,7 @@ probe syscall.settimeofday32 = name = "settimeofday" tv_uaddr = $tv tz_uaddr = $tz - argstr = sprintf("%s, %s", _struct_compat_timeval_u($tv),_struct_timezone_u($tz)) + argstr = sprintf("%s, %s", _struct_compat_timeval_u($tv, 1),_struct_timezone_u($tz)) } probe syscall.settimeofday32.return = kernel.function("sys32_settimeofday").return ?, @@ -2113,10 +2122,8 @@ probe syscall.sigpending.return = kernel.function("sys_sigpending").return ? { # sigprocmask ________________________________________________ # long sys_sigprocmask(int how, old_sigset_t __user *set, old_sigset_t __user *oset) -# long compat_sys_sigprocmask(int how, compat_old_sigset_t __user *set, compat_old_sigset_t __user *oset) # -probe syscall.sigprocmask = kernel.function("sys_sigprocmask") ?, - kernel.function("compat_sys_sigprocmask") ? +probe syscall.sigprocmask = kernel.function("sys_sigprocmask") ? { name = "sigprocmask" how = $how @@ -2125,8 +2132,7 @@ probe syscall.sigprocmask = kernel.function("sys_sigprocmask") ?, oldset_uaddr = $oset argstr = sprintf("%s, %p, %p", how_str, $set, $oset) } -probe syscall.sigprocmask.return = kernel.function("sys_sigprocmask").return ?, - kernel.function("compat_sys_sigprocmask").return ? +probe syscall.sigprocmask.return = kernel.function("sys_sigprocmask").return ? { name = "sigprocmask" retstr = returnstr(1) @@ -2316,15 +2322,21 @@ probe syscall.statfs64.return = # stime ______________________________________________________ # # long sys_stime(time_t __user *tptr) +# long compat_sys_stime(compat_time_t __user *tptr) # -probe syscall.stime = kernel.function("sys_stime")? { +probe syscall.stime = + kernel.function("sys_stime") ?, + kernel.function("compat_sys_stime") ? +{ name = "stime" t_uaddr = $tptr - - /* Fixme, should just use get_user? */ - argstr = sprintf("%p", t_uaddr) + /* FIXME. Decode time */ + argstr = sprintf("%p", $tptr) } -probe syscall.stime.return = kernel.function("sys_stime").return ?{ +probe syscall.stime.return = + kernel.function("sys_stime").return ?, + kernel.function("compat_sys_stime").return ? +{ name = "stime" retstr = returnstr(1) } @@ -2419,18 +2431,24 @@ probe syscall.sysfs.return = kernel.function("sys_sysfs").return { } # sysinfo ____________________________________________________ # -# asmlinkage long -# sys_sysinfo(struct sysinfo __user *info) -# -probe syscall.sysinfo = kernel.function("sys_sysinfo") { +# long sys_sysinfo(struct sysinfo __user *info) +# long compat_sys_sysinfo(struct compat_sysinfo __user *info) +probe syscall.sysinfo = + kernel.function("sys_sysinfo"), + kernel.function("compat_sys_sysinfo") ? +{ name = "sysinfo" info_uaddr = $info - argstr = sprintf("%p", info_uaddr) + argstr = sprintf("%p", $info) } -probe syscall.sysinfo.return = kernel.function("sys_sysinfo").return { +probe syscall.sysinfo.return = + kernel.function("sys_sysinfo").return, + kernel.function("compat_sys_sysinfo").return ? +{ name = "sysinfo" retstr = returnstr(1) } + # syslog _____________________________________________________ # # long sys_syslog(int type, char __user * buf, int len) @@ -2797,7 +2815,7 @@ probe syscall.utimes = kernel.function("sys_utimes") { filename = user_string($filename) tvp_uaddr = $utimes argstr = sprintf("%s, %s", user_string_quoted($filename), - _struct_timeval2_u($utimes)) + _struct_timeval_u($utimes, 2)) } probe syscall.utimes.return = kernel.function("sys_utimes").return { name = "utimes" @@ -2811,13 +2829,35 @@ probe syscall.compat_sys_utimes = kernel.function("compat_sys_utimes") ? { name = "utimes" filename = user_string($filename) argstr = sprintf("%s, %s", user_string_quoted($filename), - _struct_compat_timeval2_u($t)) + _struct_compat_timeval_u($t, 2)) } probe syscall.compat_sys_utimes.return = kernel.function("compat_sys_utimes").return ? { name = "utimes" retstr = returnstr(1) } +# utimensat ____________________________________________________ +# long sys_utimensat(int dfd, char __user *filename, struct timespec __user *utimes, int flags) +# long compat_sys_utimensat(unsigned int dfd, char __user *filename, struct compat_timespec __user *t, int flags) +# +probe syscall.utimensat = kernel.function("sys_utimensat") ? { + name = "utimensat" + argstr = sprintf("%s, %s, %s, %s", _dfd_str($dfd), user_string_quoted($filename), _struct_timespec_u($utimes,2), + _utimensat_flag_str($flags)) +} +probe syscall.compat_utimensat = kernel.function("compat_sys_utimensat") ? { + name = "utimensat" + argstr = sprintf("%s, %s, %s, %s", _dfd_str($dfd), user_string_quoted($filename), _struct_compat_timespec_u($utimes,2), + _utimensat_flag_str($flags)) +} +probe syscall.utimensat.return = + kernel.function("sys_utimensat").return ?, + kernel.function("compat_sys_utimensat").return ? +{ + name = "utimensat" + retstr = returnstr(1) +} + # vhangup ____________________________________________________ # # asmlinkage long @@ -2831,10 +2871,10 @@ probe syscall.vhangup.return = kernel.function("sys_vhangup").return { name = "vhangup" retstr = returnstr(1) } + # wait4 ______________________________________________________ # -# asmlinkage long -# sys_wait4(pid_t pid, +# long sys_wait4(pid_t pid, # int __user *stat_addr, # int options, # struct rusage __user *ru) @@ -2846,8 +2886,7 @@ probe syscall.wait4 = kernel.function("sys_wait4") { options = $options options_str = _wait4_opt_str($options) rusage_uaddr = $ru - argstr = sprintf("%d, %p, %s, %p", $pid, status_uaddr, - options_str, rusage_uaddr) + argstr = sprintf("%d, %p, %s, %p", $pid, $stat_addr, _wait4_opt_str($options), $ru) } probe syscall.wait4.return = kernel.function("sys_wait4").return { @@ -2856,8 +2895,7 @@ probe syscall.wait4.return = kernel.function("sys_wait4").return { } # waitid _____________________________________________________ # -# asmlinkage long -# sys_waitid(int which, +# long sys_waitid(int which, # pid_t pid, # struct siginfo __user *infop, # int options, @@ -2873,7 +2911,7 @@ probe syscall.waitid = kernel.function("sys_waitid") { options_str = _wait4_opt_str($options) rusage_uaddr = $ru argstr = sprintf("%d, %d, %p, %s, %p", $which, $pid, - infop_uaddr, options_str, rusage_uaddr) + $infop, _wait4_opt_str($options), $ru) } probe syscall.waitid.return = kernel.function("sys_waitid").return { name = "waitid" |