summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tapset/ChangeLog32
-rw-r--r--tapset/aux_syscalls.stp139
-rw-r--r--tapset/ppc64/syscalls.stp137
-rw-r--r--tapset/syscalls.stp76
-rw-r--r--tapset/syscalls2.stp140
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"