diff options
Diffstat (limited to 'tapset')
-rw-r--r-- | tapset/aux_syscalls.stp | 75 | ||||
-rw-r--r-- | tapset/i686/syscalls.stp | 13 | ||||
-rw-r--r-- | tapset/ppc64/syscalls.stp | 244 | ||||
-rw-r--r-- | tapset/syscalls.stp | 2 | ||||
-rw-r--r-- | tapset/syscalls2.stp | 2 | ||||
-rw-r--r-- | tapset/x86_64/syscalls.stp | 12 |
6 files changed, 76 insertions, 272 deletions
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp index e50bb89e..951dc293 100644 --- a/tapset/aux_syscalls.stp +++ b/tapset/aux_syscalls.stp @@ -17,6 +17,21 @@ function _struct_timeval_u:string(uaddr:long) } %} +function _struct_compat_timeval_u:string(uaddr:long) +%{ /* pure */ + struct compat_timeval tv; + char *ptr = (char *)(unsigned long)THIS->uaddr; + + if (ptr == NULL) + 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); + else + strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); + } +%} + function _struct_timeval:string(addr:long) %{ /* pure */ struct timeval *tv; @@ -90,7 +105,26 @@ function _struct_utimbuf_u:string(uaddr:long) if (ptr == NULL) strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); else { - if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(struct utimbuf)) == 0) { + if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(ubuf)) == 0) { + _stp_ctime(ubuf.actime, abuf, 24); + _stp_ctime(ubuf.modtime, mbuf, 24); + snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s, %s", abuf, mbuf); + } else + strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); + } +%} + +function _struct_compat_utimbuf_u:string(uaddr:long) +%{ /* pure */ + #include <linux/utime.h> + struct compat_utimbuf ubuf; + static char abuf[24], mbuf[24]; + char *ptr = (char *)(unsigned long)THIS->uaddr; + + if (ptr == NULL) + strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); + else { + if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(ubuf)) == 0) { _stp_ctime(ubuf.actime, abuf, 24); _stp_ctime(ubuf.modtime, mbuf, 24); snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s, %s", abuf, mbuf); @@ -114,6 +148,21 @@ function _struct_timespec_u:string(uaddr:long) (unsigned long)ts.tv_sec, (unsigned long)ts.tv_nsec); } %} +function _struct_compat_timespec_u:string(uaddr:long) +%{ /* pure */ + struct compat_timespec ts; + char *ptr = (char *)(unsigned long)THIS->uaddr; + + if (ptr == NULL) + strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); + else { + if(_stp_copy_from_user((char *)&ts,ptr,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); + } +%} function _struct_timespec:string(addr:long) %{ /* pure */ @@ -163,6 +212,23 @@ function _struct_itimerval_u:string(uaddr:long) } %} +function _struct_compat_itimerval_u:string(uaddr:long) +%{ /* pure */ + struct compat_itimerval itv; + char *ptr = (char *)(unsigned long)THIS->uaddr; + + if (ptr == NULL) + strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN); + else { + if(_stp_copy_from_user((char *)&itv,ptr,sizeof(struct compat_itimerval))) + strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN); + else + snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d.%06d,%d.%06d]", + (int)itv.it_interval.tv_sec, (int)itv.it_interval.tv_usec, + (int)itv.it_value.tv_sec, (int)itv.it_value.tv_usec); + } +%} + function _struct_itimerval:string(addr:long) %{ /* pure */ struct itimerval *itv; @@ -1445,3 +1511,10 @@ function __short:long(val:long) %{ /* pure */ THIS->__retvalue = (short)THIS->val; %} + +/* uid_t is unsigned, but calling functions take "-1" as a paremeter */ +/* so this hack is necessary to correct that mismatch. */ +function __uid:long(val:long) %{ /* pure */ + THIS->__retvalue = (int)THIS->val; +%} + diff --git a/tapset/i686/syscalls.stp b/tapset/i686/syscalls.stp index a7dfa4fc..1880ab9f 100644 --- a/tapset/i686/syscalls.stp +++ b/tapset/i686/syscalls.stp @@ -398,19 +398,6 @@ probe syscall.sigsuspend.return = name = "sigsuspend" retstr = returnstr(1) } -# stat64 _____________________________________________________ -# long sys_stat64(char __user * filename, -# struct stat64 __user * statbuf) -probe syscall.stat64 = kernel.function("sys_stat64") { - name = "stat" - filename = user_string($filename) - buf_uaddr = $statbuf - argstr = sprintf("\"%s\", %p", filename, $statbuf) -} -probe syscall.stat64.return = kernel.function("sys_stat64").return { - name = "stat" - retstr = returnstr(1) -} # vm86 _______________________________________________________ /* diff --git a/tapset/ppc64/syscalls.stp b/tapset/ppc64/syscalls.stp index fbecd156..547ba47c 100644 --- a/tapset/ppc64/syscalls.stp +++ b/tapset/ppc64/syscalls.stp @@ -1,20 +1,4 @@ -# compat_sys_nanosleep ________________________________________ -# -# asmlinkage long compat_sys_nanosleep(struct compat_timespec __user *rqtp, -# struct compat_timespec __user *rmtp) -# -probe syscall.compat_sys_nanosleep = kernel.function("compat_sys_nanosleep") { - name = "compat_sys_nanosleep" - rqtp_uaddr = $rqtp - rmtp_uaddr = $rmtp - argstr = sprintf("%p, %p", rqtp_uaddr, rmtp_uaddr) -} -probe syscall.compat_sys_nanosleep.return = - kernel.function("compat_sys_nanosleep").return { - name = "compat_sys_nanosleep" - retstr = returnstr(1) -} # compat_sys_getitimer ________________________________________ # # asmlinkage long compat_sys_getitimer(int which, @@ -31,25 +15,6 @@ probe syscall.compat_sys_getitimer.return = name = "compat_sys_getitimer" retstr = returnstr(1) } -# compat_sys_setitimer ________________________________________ -# -# asmlinkage long compat_sys_setitimer(int which, -# struct compat_itimerval __user *in, -# struct compat_itimerval __user *out) -# -probe syscall.compat_sys_setitimer = kernel.function("compat_sys_setitimer") { - name = "compat_sys_setitimer" - which = $which - value_uaddr = $in - ovalue_uaddr = $out - argstr = sprintf("%s, %s, %p", _itimer_which_str($which), - _struct_itimerval_u($in), $out) -} -probe syscall.compat_sys_setitimer.return = - kernel.function("compat_sys_setitimer").return { - name = "compat_sys_setitimer" - retstr = returnstr(1) -} # compat_sys_times ________________________________________ # # asmlinkage long compat_sys_times(struct compat_tms __user *tbuf) @@ -241,22 +206,6 @@ probe syscall.compat_sys_sched_getaffinity.return = name = "compat_sys_sched_getaffinity" retstr = returnstr(1) } -# compat_sys_utime ________________________________________ -# -# asmlinkage long compat_sys_utime(char __user *filename, -# struct compat_utimbuf __user *t) -# -probe syscall.compat_sys_utime = kernel.function("compat_sys_utime") { - name = "compat_sys_utime" - path = user_string($filename) - buf_uaddr = $t - argstr = sprintf("%s, %p", user_string_quoted($filename), buf_uaddr) -} -probe syscall.compat_sys_utime.return = - kernel.function("compat_sys_utime").return { - name = "compat_sys_utime" - retstr = returnstr(1) -} # compat_sys_utimes ________________________________________ # # asmlinkage long compat_sys_utimes(char __user *filename, @@ -274,22 +223,6 @@ probe syscall.compat_sys_utimes.return = name = "compat_sys_utimes" retstr = returnstr(1) } -# compat_sys_newstat ________________________________________ -# -# asmlinkage long compat_sys_newstat(char __user * filename, -# struct compat_stat __user *statbuf) -# -probe syscall.compat_sys_newstat = kernel.function("compat_sys_newstat") { - name = "compat_sys_newstat" - path = user_string($filename) - buf_uaddr = $statbuf - argstr = sprintf("%s, %p", user_string_quoted($filename), buf_uaddr) -} -probe syscall.compat_sys_newstat.return = - kernel.function("compat_sys_newstat").return { - name = "compat_sys_newstat" - retstr = returnstr(1) -} # compat_sys_newlstat ________________________________________ # # asmlinkage long compat_sys_newlstat(char __user * filename, @@ -306,54 +239,6 @@ probe syscall.compat_sys_newlstat.return = name = "compat_sys_newlstat" retstr = returnstr(1) } -# compat_sys_newfstat ________________________________________ -# -# asmlinkage long compat_sys_newfstat(unsigned int fd, -# struct compat_stat __user * statbuf) -# -probe syscall.compat_sys_newfstat = kernel.function("compat_sys_newfstat") { - name = "compat_sys_newfstat" - filedes = $fd - buf_uaddr = $statbuf - argstr = sprintf("%d, %p", filedes, buf_uaddr) -} -probe syscall.compat_sys_newfstat.return = - kernel.function("compat_sys_newfstat").return { - name = "compat_sys_newfstat" - retstr = returnstr(1) -} -# compat_sys_statfs ________________________________________ -# -# asmlinkage long compat_sys_statfs(const char __user *path, -# struct compat_statfs __user *buf) -# -probe syscall.compat_sys_statfs = kernel.function("compat_sys_statfs") { - name = "statfs" - path = user_string($path) - buf_uaddr = $buf - argstr = sprintf("%s, %p", path, buf_uaddr) -} -probe syscall.compat_sys_statfs.return = - kernel.function("compat_sys_statfs").return { - name = "compat_sys_statfs" - retstr = returnstr(1) -} -# compat_sys_fstatfs ________________________________________ -# -# asmlinkage long compat_sys_fstatfs(unsigned int fd, -# struct compat_statfs __user *buf) -# -probe syscall.compat_sys_fstatfs = kernel.function("compat_sys_fstatfs") { - name = "fstatfs" - fd = $fd - buf_uaddr = $buf - argstr = sprintf("%d, %p", fd, buf_uaddr) -} -probe syscall.compat_sys_fstatfs.return = - kernel.function("compat_sys_fstatfs").return { - name = "fstatfs" - retstr = returnstr(1) -} # lstat ______________________________________________________ # long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf) probe syscall.lstat64 = @@ -475,30 +360,6 @@ probe syscall.compat_sys_io_submit.return = name = "compat_sys_io_submit" retstr = returnstr(1) } -# compat_sys_mount ________________________________________ -# -# asmlinkage long compat_sys_mount(char __user * dev_name, -# char __user * dir_name, -# char __user * type, -# unsigned long flags, -# void __user * data) -# -probe syscall.compat_sys_mount = kernel.function("compat_sys_mount") { - name = "mount" - source = user_string($dev_name) - target = user_string($dir_name) - filesystemtype = user_string($type) - mountflags = $flags - data_uaddr = $data - argstr = sprintf("\"%s\", \"%s\", \"%s\", %s, %p", source, - target, filesystemtype, _mountflags_str($flags), - data_uaddr) -} -probe syscall.compat_sys_mount.return = - kernel.function("compat_sys_mount").return { - name = "mount" - retstr = returnstr(1) -} # compat_sys_getdents ________________________________________ # # asmlinkage long compat_sys_getdents(unsigned int fd, @@ -535,47 +396,6 @@ probe syscall.compat_sys_getdents64.return = name = "compat_sys_getdents64" retstr = returnstr(1) } -# compat_sys_readv ________________________________________ -# -# asmlinkage ssize_t compat_sys_readv(unsigned long fd, -# const struct compat_iovec __user *vec, -# unsigned long vlen) -# -probe syscall.compat_sys_readv = kernel.function("compat_sys_readv") { - name = "readv" -/* FIXME: RHEL4 U3 ppc64 can't resolve $fd */ - fd = $fd - vector_uaddr = $vec - count = $vlen -// argstr = sprintf("unknown fd, %p, %p", vector_uaddr, count) - argstr = sprintf("%d, %p, %p", fd, vector_uaddr, count) -} -probe syscall.compat_sys_readv.return = - kernel.function("compat_sys_readv").return { - name = "readv" - retstr = returnstr(1) -} -# compat_sys_writev ________________________________________ -# -# asmlinkage ssize_t compat_sys_writev(unsigned long fd, -# const struct compat_iovec __user *vec, -# unsigned long vlen) -# -probe syscall.compat_sys_writev = kernel.function("compat_sys_writev") { - name = "writev" -/* FIXME: RHEL4 U3 can't resolve $fd */ - fd = $fd - vector_uaddr = $vec - count = $vlen - //argstr = sprintf("unknown fd, %p, %d", vector_uaddr, $vlen) - argstr = sprintf("%d, %p, %d", fd, vector_uaddr, $vlen) -} -probe syscall.compat_sys_writev.return = - kernel.function("compat_sys_writev").return { - name = "writev" - retstr = returnstr(1) -} -# compat_sys_select ________________________________________ # # asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp, # compat_ulong_t __user *outp, @@ -1134,20 +954,6 @@ probe syscall.sys32_execve.return = retstr = returnstr(1) } -# sys32_time ________________________________________ -# -# asmlinkage long sys32_time(compat_time_t __user * tloc) -# -probe syscall.sys32_time = kernel.function("sys32_time") ? { - name = "sys32_time" - /* FIXME */ - t_uaddr = $tloc - argstr = sprintf("%p", t_uaddr) -} -probe syscall.sys32_time.return = kernel.function("sys32_time").return ? { - name = "sys32_time" - retstr = returnstr(1) -} # ppc64_sys32_stime ________________________________________ # @@ -1240,38 +1046,6 @@ probe syscall.sys32_sigsuspend.return = name = "sys32_sigsuspend" retstr = returnstr(1) } -# sys32_gettimeofday ________________________________________ -# -# asmlinkage long sys32_gettimeofday(struct compat_timeval __user *tv, -# struct timezone __user *tz) -# -probe syscall.sys32_gettimeofday = kernel.function("sys32_gettimeofday") ? { - name = "sys32_gettimeofday" - tv_uaddr = $tv - tz_uaddr = $tz - argstr = sprintf("%p, %p", tv_uaddr, tz_uaddr) -} -probe syscall.sys32_gettimeofday.return = - kernel.function("sys32_gettimeofday").return ? { - name = "sys32_gettimeofday" - retstr = returnstr(1) -} -# sys32_settimeofday ________________________________________ -# -# asmlinkage long sys32_settimeofday(struct compat_timeval __user *tv, -# struct timezone __user *tz) -# -probe syscall.sys32_settimeofday = kernel.function("sys32_settimeofday") ? { - name = "sys32_settimeofday" - tv_uaddr = $tv - tz_uaddr = $tz - argstr = sprintf("%p, %p", tv_uaddr, tz_uaddr) -} -probe syscall.sys32_settimeofday.return = - kernel.function("sys32_settimeofday").return ? { - name = "sys32_settimeofday" - retstr = returnstr(1) -} # sys32_sysinfo ________________________________________ # # asmlinkage long sys32_sysinfo(struct sysinfo32 __user *info) @@ -1429,24 +1203,6 @@ probe syscall.sys32_rt_sigreturn.return = name = "sys32_rt_sigreturn" retstr = returnstr(1) } -# sys32_rt_sigaction ________________________________________ -# -# long sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, -# struct sigaction32 __user *oact, size_t sigsetsize) -# -probe syscall.sys32_rt_sigaction = kernel.function("sys32_rt_sigaction") ? { - name = "sys32_rt_sigaction" - sig = $sig - act_uaddr = $act - oact_uaddr = $oact - sigsetsize = $sigsetsize - argstr = sprintf("%s, %p, %p, %d", _signal_name($sig), $act, $oact, $sigsetsize) -} -probe syscall.sys32_rt_sigaction.return = - kernel.function("sys32_rt_sigaction").return ? { - name = "sys32_rt_sigaction" - retstr = returnstr(1) -} # sys32_rt_sigprocmask ________________________________________ # # long sys32_rt_sigprocmask(u32 how, compat_sigset_t __user *set, diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp index 51121f9c..a613ffa9 100644 --- a/tapset/syscalls.stp +++ b/tapset/syscalls.stp @@ -1042,7 +1042,7 @@ probe syscall.compat_getitimer = kernel.function("compat_sys_getitimer") ? { value_uaddr = $it argstr = sprintf("%s, %p", _itimer_which_str($which), $it) } -probe syscall.compat_getitimer.return = kernel.function("compat_sys_getitimer").return { +probe syscall.compat_getitimer.return = kernel.function("compat_sys_getitimer").return ? { name = "getitimer" retstr = returnstr(1) } diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp index 046c5bb3..fbdfffba 100644 --- a/tapset/syscalls2.stp +++ b/tapset/syscalls2.stp @@ -2359,7 +2359,7 @@ probe syscall.compat_utime = kernel.function("compat_sys_utime") ? { buf_str = _struct_compat_utimbuf_u($t) argstr = sprintf("%s, [%s]", user_string_quoted($filename), _struct_compat_utimbuf_u($t)) } -probe syscall.compat_utime.return = kernel.function("compat_sys_utime").return { +probe syscall.compat_utime.return = kernel.function("compat_sys_utime").return ? { name = "utime" retstr = returnstr(1) } diff --git a/tapset/x86_64/syscalls.stp b/tapset/x86_64/syscalls.stp index 4666a72e..2a18aab3 100644 --- a/tapset/x86_64/syscalls.stp +++ b/tapset/x86_64/syscalls.stp @@ -124,16 +124,4 @@ probe syscall.sigaltstack.return = kernel.function("sys_sigaltstack").return { retstr = returnstr(1) } -# time64 _____________________________________________________ -# long sys_time64(long __user * tloc) -# -probe syscall.time64 = kernel.function("sys_time64") ? { - name = "time64" - t_uaddr = $tloc - argstr = sprintf("%p", $tloc) -} -probe syscall.time64.return = kernel.function("sys_time64").return ? { - name = "time64" - retstr = returnstr(1) -} |