diff options
author | hunt <hunt> | 2007-07-31 16:20:30 +0000 |
---|---|---|
committer | hunt <hunt> | 2007-07-31 16:20:30 +0000 |
commit | a968ea63067cb079cbd1608804ec80c36026f0ab (patch) | |
tree | 3f39852ec51e7e39ce69a0ec1d39449ef56b1067 | |
parent | 291f7a3a00b127c0128434c7af7923331ef34bd7 (diff) | |
download | systemtap-steved-a968ea63067cb079cbd1608804ec80c36026f0ab.tar.gz systemtap-steved-a968ea63067cb079cbd1608804ec80c36026f0ab.tar.xz systemtap-steved-a968ea63067cb079cbd1608804ec80c36026f0ab.zip |
2007-07-31 Martin Hunt <hunt@redhat.com>
* */syscalls.stp: Added mmap functions.
Continued moving common compatibility functions to
the main tapset.
* aux_syscalls.stp (_shmat_flags_str): New.
(__get_compat_argv): New.
* syscalls.stp (adjtimex): Just print hex argument.
(compat_adjtimex): New.
(clock_getres): Also probe compat_clock_getres.
(clock_gettime): Also probe compat funcs.
(compat_clock_nanosleep): New.
(compat_execve): New.
(fstatat): New.
(get[e][gu]id): Also probe sys32.
(getsockopt): Make optional. Also probe compat.
(mmap, mmap2): These are arch-specific, so move to individual
architecture subdirs.
(compat_sys_msgctl): New.
(compat_sys_msgrcv): New.
(compat_sys_msgsnd): New.
* syscalls.stp (pread32): Remove. It calls pread64 .
(quotactl): Make optional.
(recv): Probe correct function.
(recvfrom): Fix args.
(compat_sys_recvmsg): New.
(semctl): Make optional.
(compat_sys_semctl): New.
(semget): Make optional.
(semop): Make optional.
(semtimedop): Make optional.
(compat_sys_semtimedop): New.
(send): Make optional.
(sendmsg): Make optional.
(compat_sys_sendmsg): New.
(sendto): Make optional.
(setsockopt): Make optional. Add compat.
(shmat): New.
(compat_sys_shmat): New.
(shmctl): New.
(compat_sys_shmctl): New.
(shmdt): New.
(shmget): New.
(shutdown): Make optional.
(socket): Make optional.
(socketpair): Make optional.
(swapoff): Make optional.
(swapon): Make optional.
(sysctl): Add probe on sys32.
-rw-r--r-- | tapset/ChangeLog | 53 | ||||
-rw-r--r-- | tapset/aux_syscalls.stp | 65 | ||||
-rw-r--r-- | tapset/i686/syscalls.stp | 66 | ||||
-rw-r--r-- | tapset/ia64/syscalls.stp | 43 | ||||
-rw-r--r-- | tapset/ppc64/syscalls.stp | 362 | ||||
-rw-r--r-- | tapset/s390x/syscalls.stp | 65 | ||||
-rw-r--r-- | tapset/syscalls.stp | 247 | ||||
-rw-r--r-- | tapset/syscalls2.stp | 328 | ||||
-rw-r--r-- | tapset/x86_64/syscalls.stp | 22 |
9 files changed, 708 insertions, 543 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog index e1e6f4eb..00d68664 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,3 +1,56 @@ +2007-07-31 Martin Hunt <hunt@redhat.com> + + * */syscalls.stp: Added mmap functions. + Continued moving common compatibility functions to + the main tapset. + + * aux_syscalls.stp (_shmat_flags_str): New. + (__get_compat_argv): New. + + * syscalls.stp (adjtimex): Just print hex argument. + (compat_adjtimex): New. + (clock_getres): Also probe compat_clock_getres. + (clock_gettime): Also probe compat funcs. + (compat_clock_nanosleep): New. + (compat_execve): New. + (fstatat): New. + (get[e][gu]id): Also probe sys32. + (getsockopt): Make optional. Also probe compat. + (mmap, mmap2): These are arch-specific, so move to individual + architecture subdirs. + (compat_sys_msgctl): New. + (compat_sys_msgrcv): New. + (compat_sys_msgsnd): New. + + * syscalls.stp (pread32): Remove. It calls pread64 . + (quotactl): Make optional. + (recv): Probe correct function. + (recvfrom): Fix args. + (compat_sys_recvmsg): New. + (semctl): Make optional. + (compat_sys_semctl): New. + (semget): Make optional. + (semop): Make optional. + (semtimedop): Make optional. + (compat_sys_semtimedop): New. + (send): Make optional. + (sendmsg): Make optional. + (compat_sys_sendmsg): New. + (sendto): Make optional. + (setsockopt): Make optional. Add compat. + (shmat): New. + (compat_sys_shmat): New. + (shmctl): New. + (compat_sys_shmctl): New. + (shmdt): New. + (shmget): New. + (shutdown): Make optional. + (socket): Make optional. + (socketpair): Make optional. + (swapoff): Make optional. + (swapon): Make optional. + (sysctl): Add probe on sys32. + 2007-07-31 Frank Ch. Eigler <fche@elastic.org> PR 4793 diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp index d1a504de..8f9fcb73 100644 --- a/tapset/aux_syscalls.stp +++ b/tapset/aux_syscalls.stp @@ -650,6 +650,64 @@ function __get_argv:string(a:long) } *str = 0; %} +/* This function copies an argv from userspace. */ +function __get_compat_argv:string(a:long) +%{ /* pure */ + compat_uptr_t __user *__user *argv = (compat_uptr_t __user *__user *)(long)THIS->a; + compat_uptr_t __user *vstr; + int space, rc, len = MAXSTRINGLEN; + char *str = THIS->__retvalue; + char buf[80]; + char *ptr = buf; + + if (argv) + argv++; + + while (argv != NULL) { + if (get_user (vstr, argv)) + break; + + if (vstr == NULL) + break; + + rc = _stp_strncpy_from_user(buf, vstr, 79); + if (rc <= 0) + break; + + /* check for whitespace in string */ + buf[rc] = 0; + ptr = buf; + space = 0; + while (*ptr && rc--) { + if (isspace(*ptr++)) { + space = 1; + break; + } + } + + if (len != MAXSTRINGLEN && len) { + *str++=' '; + len--; + } + + if (space && len) { + *str++='\"'; + len--; + } + + rc = strlcpy (str, buf, len); + str += rc; + len -= rc; + + if (space && len) { + *str++='\"'; + len--; + } + + argv++; + } + *str = 0; +%} /* * Return a integer member value of struct @@ -1562,3 +1620,10 @@ function __int32:long(val:long) %{ /* pure */ THIS->__retvalue = (int32_t)THIS->val; %} +function _shmat_flags_str(f) { + if(f & 010000) bs="SHM_RDONLY|".bs + if(f & 020000) bs="SHM_RND|".bs + if(f & 040000) bs="SHM_REMAP|".bs + if(f & 0100000) bs="SHM_EXEC|".bs + return substr(bs,0,strlen(bs)-1) +} diff --git a/tapset/i686/syscalls.stp b/tapset/i686/syscalls.stp index ad984075..1106ea3d 100644 --- a/tapset/i686/syscalls.stp +++ b/tapset/i686/syscalls.stp @@ -1,3 +1,7 @@ +# 32-bit x86-specific system calls +# These are typically defined in arch/i386 +# + # get_thread_area ____________________________________________ /* * asmlinkage int @@ -28,16 +32,9 @@ probe syscall.iopl.return = kernel.function("sys_iopl").return { } # ipc ________________________________________________________ -/* - * asmlinkage int - * sys_ipc(uint call, - * int first, - * int second, - * int third, - * void __user *ptr, - * long fifth) - */ -probe syscall.ipc = kernel.function("sys_ipc") { +# int sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fifth) +# +probe syscall.ipc = kernel.function("sys_ipc") ? { name = "ipc" call = $call first = $first @@ -46,13 +43,38 @@ probe syscall.ipc = kernel.function("sys_ipc") { ptr_uaddr = $ptr fifth = $fifth argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first, - $second, $third, ptr_uaddr, $fifth) + $second, $third, $ptr, $fifth) } -probe syscall.ipc.return = kernel.function("sys_ipc").return { +probe syscall.ipc.return = kernel.function("sys_ipc").return ? { name = "ipc" retstr = returnstr(1) } + +# mmap2 ____________________________________________ +# sys_mmap2(unsigned long addr, unsigned long len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long pgoff) +# +probe syscall.mmap2 = kernel.function("sys_mmap2") ? +{ + name = "mmap2" + start = $addr + length = $len + prot = $prot + flags = $flags + fd = $fd + pgoffset = $pgoff + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, + $len, _mprotect_prot_str($prot), _mmap_flags($flags), + $fd, $pgoff) +} +probe syscall.mmap2.return = kernel.function("sys_mmap2").return ? +{ + name = "mmap2" + retstr = returnstr(2) +} + # set_thread_area ____________________________________________ /* * asmlinkage int @@ -91,26 +113,6 @@ probe syscall.set_zone_reclaim.return = retstr = returnstr(1) } %) -# shmat ______________________________________________________ -/* - * asmlinkage long - * sys_shmat(int shmid, - * char __user *shmaddr, - * int shmflg) - */ -probe syscall.shmat = - kernel.function("sys_shmat") { - name = "shmat" - shmid = $shmid - shmaddr_uaddr = $shmaddr - shmflg = $shmflg - argstr = sprintf("%d, %p, %d", $shmid, shmaddr_uaddr, $shmflg) -} -probe syscall.shmat.return = - kernel.function("sys_shmat").return { - name = "shmat" - retstr = returnstr(1) -} # sigaltstack ________________________________________________ # int sys_sigaltstack(unsigned long ebx) diff --git a/tapset/ia64/syscalls.stp b/tapset/ia64/syscalls.stp new file mode 100644 index 00000000..2a281471 --- /dev/null +++ b/tapset/ia64/syscalls.stp @@ -0,0 +1,43 @@ +# IA64 system calls + +# mmap +# sys_mmap (unsigned long addr, unsigned long len, int prot, int flags, int fd, long off) +# +probe syscall.mmap = kernel.function("sys_mmap") ? { + name = "mmap" + start = $addr + len = $len + prot = $prot + flags = $flags + fd = $fd + offset = $off + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, + _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $off) +} + +probe syscall.mmap.return = kernel.function("sys_mmap").return ? { + name = "mmap" + retstr = returnstr(2) +} + +# mmap2 +# sys_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, long pgoff) +probe syscall.mmap2 = kernel.function("sys_mmap2") ? +{ + name = "mmap2" + start = $addr + length = $len + prot = $prot + flags = $flags + fd = $fd + pgoffset = $pgoff + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, + $len, _mprotect_prot_str($prot), _mmap_flags($flags), + $fd, $pgoff) +} +probe syscall.mmap2.return = kernel.function("sys_mmap2").return ? +{ + name = "mmap2" + retstr = returnstr(2) +} + diff --git a/tapset/ppc64/syscalls.stp b/tapset/ppc64/syscalls.stp index 8d614fa5..7e7ad3c9 100644 --- a/tapset/ppc64/syscalls.stp +++ b/tapset/ppc64/syscalls.stp @@ -1,3 +1,4 @@ +# PPC64-specific system calls # compat_sys_sigpending ________________________________________ # @@ -210,130 +211,6 @@ probe syscall.compat_sys_fcntl.return = retstr = returnstr(1) } -# compat_sys_semctl ________________________________________ -# -# long compat_sys_semctl(int first, int second, int third, void __user *uptr) -# -probe syscall.compat_sys_semctl = kernel.function("compat_sys_semctl") { - name = "compat_sys_semctl" - semid = $first - semnum = $second - cmd = $third -# arg_uaddr = $uptr - argstr = sprintf("%d, %d, %s", semid, semnum, _semctl_cmd(cmd)) -} -probe syscall.compat_sys_semctl.return = - kernel.function("compat_sys_semctl").return { - name = "compat_sys_semctl" - retstr = returnstr(1) -} -# compat_sys_msgsnd ________________________________________ -# -# long compat_sys_msgsnd(int first, int second, int third, void __user *uptr) -# -probe syscall.compat_sys_msgsnd = kernel.function("compat_sys_msgsnd") { - name = "compat_sys_msgsnd" - first = $first - second = $second - third = $third - uptr_uaddr = $uptr - argstr = sprintf("%d, %d, %d, %p", first, second, third, - uptr_uaddr) -} -probe syscall.compat_sys_msgsnd.return = - kernel.function("compat_sys_msgsnd").return { - name = "compat_sys_msgsnd" - retstr = returnstr(1) -} -# compat_sys_msgrcv ________________________________________ -# -# long compat_sys_msgrcv(int first, int second, int msgtyp, int third, -# int version, void __user *uptr) -# -probe syscall.compat_sys_msgrcv = kernel.function("compat_sys_msgrcv") { - name = "compat_sys_msgrcv" - first = $first - second = $second - third = $third - uptr_uaddr = $uptr - argstr = sprintf("%d, %d, %d, %p", first, second, third, - uptr_uaddr) -} -probe syscall.compat_sys_msgrcv.return = - kernel.function("compat_sys_msgrcv").return { - name = "compat_sys_msgrcv" - retstr = returnstr(1) -} -# compat_sys_msgctl ________________________________________ -# -# long compat_sys_msgctl(int first, int second, void __user *uptr) -# -probe syscall.compat_sys_msgctl = kernel.function("compat_sys_msgctl") { - name = "compat_sys_msgctl" - first = $first - second = $second - uptr_uaddr = $uptr - argstr = sprintf("%d, %d, %p", first, second, uptr_uaddr) -} -probe syscall.compat_sys_msgctl.return = - kernel.function("compat_sys_msgctl").return { - name = "compat_sys_msgctl" - retstr = returnstr(1) -} -# compat_sys_shmat ________________________________________ -# -# long compat_sys_shmat(int first, int second, compat_uptr_t third, -# int version, void __user *uptr) -# -probe syscall.compat_sys_shmat = kernel.function("compat_sys_shmat") { - name = "compat_sys_shmat" - first = $first - second = $second - third = $third - uptr_uaddr = $uptr - argstr = sprintf("%d, %d, %d, %p", first, second, third, - uptr_uaddr) -} -probe syscall.compat_sys_shmat.return = - kernel.function("compat_sys_shmat").return { - name = "compat_sys_shmat" - retstr = returnstr(1) -} -# compat_sys_shmctl ________________________________________ -# -# long compat_sys_shmctl(int first, int second, void __user *uptr) -# -probe syscall.compat_sys_shmctl = kernel.function("compat_sys_shmctl") { - name = "compat_sys_shmctl" - first = $first - second = $second - uptr_uaddr = $uptr - argstr = sprintf("%d, %d, %p", first, second, uptr_uaddr) -} -probe syscall.compat_sys_shmctl.return = - kernel.function("compat_sys_shmctl").return { - name = "compat_sys_shmctl" - retstr = returnstr(1) -} -# compat_sys_semtimedop ________________________________________ -# -# long compat_sys_semtimedop(int semid, struct sembuf __user *tsems, -# unsigned nsops, const struct compat_timespec __user *timeout) -# -probe syscall.compat_sys_semtimedop = kernel.function("compat_sys_semtimedop") { - name = "compat_sys_semtimedop" - semid = $semid - sops_uaddr = tsems - nsops = $nsops - timeout_uaddr = $timeout - argstr = sprintf("%d, %p, %d, %s", semid, sops_uaddr, nsops, - _struct_timespec_u(timeout_uaddr)) -} -probe syscall.compat_sys_semtimedop.return = - kernel.function("compat_sys_semtimedop").return { - name = "compat_sys_semtimedop" - retstr = returnstr(1) -} # compat_sys_mq_open ________________________________________ # # asmlinkage long compat_sys_mq_open(const char __user *u_name, @@ -455,104 +332,6 @@ probe syscall.compat_sys_keyctl.return = retstr = returnstr(1) } */ -# compat_sys_setsockopt ________________________________________ -# -# asmlinkage long compat_sys_setsockopt(int fd, int level, int optname, -# char __user *optval, int optlen) -# -probe syscall.compat_sys_setsockopt = kernel.function("compat_sys_setsockopt") { - name = "compat_sys_setsockopt" - fd = $fd - level = $level - level_str = _sockopt_level_str($level) - optname = $optname - optname_str = _sockopt_optname_str($optname) - optval_uaddr = $optval - optlen = $optlen - argstr = sprintf("%d, %s, %s, %p, %d", $fd, level_str, - optname_str, optval_uaddr, $optlen) -} -probe syscall.compat_sys_setsockopt.return = - kernel.function("compat_sys_setsockopt").return { - name = "compat_sys_setsockopt" - retstr = returnstr(1) -} -# compat_sys_getsockopt ________________________________________ -# -# asmlinkage long compat_sys_getsockopt(int fd, int level, int optname, -# char __user *optval, int __user *optlen) -# -probe syscall.compat_sys_getsockopt = kernel.function("compat_sys_getsockopt") { - name = "compat_sys_getsockopt" - s = $fd - level = $level - level_str = _sockopt_level_str($level) - optname = $optname - optname_str = _sockopt_optname_str($optname) - optval_uaddr = $optval - /* FIXME */ - optlen_uaddr = $optlen - argstr = sprintf("%d, %s, %s, %p, %p", s, level_str, - optname_str, optval_uaddr, optlen_uaddr) -} -probe syscall.compat_sys_getsockopt.return = - kernel.function("compat_sys_getsockopt").return { - name = "compat_sys_getsockopt" - retstr = returnstr(1) -} -# compat_sys_sendmsg ________________________________________ -# -# asmlinkage long compat_sys_sendmsg(int fd, -# struct compat_msghdr __user *msg, -# unsigned flags) -# -probe syscall.compat_sys_sendmsg = kernel.function("compat_sys_sendmsg") { - name = "compat_sys_sendmsg" - s = $fd - msg_uaddr = $msg - flags = $flags - argstr = sprintf("%d, %p, %s", s, msg_uaddr, - _send_flags_str($flags)) -} -probe syscall.compat_sys_sendmsg.return = - kernel.function("compat_sys_sendmsg").return { - name = "compat_sys_sendmsg" - retstr = returnstr(1) -} -# compat_sys_recvmsg ________________________________________ -# -# asmlinkage long compat_sys_recvmsg(int fd, -# struct compat_msghdr __user *msg, -# unsigned int flags) -# -probe syscall.compat_sys_recvmsg = kernel.function("compat_sys_recvmsg") { - name = "compat_sys_recvmsg" - s = $fd - msg_uaddr = $msg - flags = $flags - argstr = sprintf("%d, %p, %s", s, msg_uaddr, - _send_flags_str($flags)) -} -probe syscall.compat_sys_recvmsg.return = - kernel.function("compat_sys_recvmsg").return { - name = "compat_sys_recvmsg" - retstr = returnstr(1) -} -# compat_sys_socketcall ________________________________________ -# -# asmlinkage long compat_sys_socketcall(int call, u32 __user *args) -# -probe syscall.compat_sys_socketcall = kernel.function("compat_sys_socketcall") { - name = "compat_sys_socketcall" - call = $call - args_uaddr = $args - argstr = sprintf("%d, %p", call, args_uaddr) -} -probe syscall.compat_sys_socketcall.return = - kernel.function("compat_sys_socketcall").return { - name = "compat_sys_socketcall" - retstr = returnstr(1) -} #sys32_open _______________________________________________________ # asmlinkage long sys32_open(const char * filename, int flags, int mode) @@ -702,26 +481,22 @@ probe syscall.sys32_sysinfo.return = name = "sys32_sysinfo" retstr = returnstr(1) } -# sys32_ipc ________________________________________ + +# ipc ________________________________________ # # long sys32_ipc(u32 call, u32 first, u32 second, u32 third, # compat_uptr_t ptr, u32 fifth) # -probe syscall.sys32_ipc = kernel.function("sys32_ipc") ? { - name = "sys32_ipc" - call = $call - first = $first - second = $second - third = $third - ptr_uaddr = $ptr - fifth = $fifth - argstr = sprintf("%d, %d, %d, %d, %p, %d", call, first, second, - third, ptr_uaddr, fifth) -} -probe syscall.sys32_ipc.return = kernel.function("sys32_ipc").return ? { - name = "sys32_ipc" +probe syscall.ipc = kernel.function("sys32_ipc") ? { + name = "ipc" + argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first, $second, + $third, $ptr, $fifth) +} +probe syscall.ipc.return = kernel.function("sys32_ipc").return ? { + name = "sys_ipc" retstr = returnstr(1) } + # sys32_sigreturn ________________________________________ # # long sys32_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8, @@ -749,14 +524,13 @@ probe syscall.sys32_sigreturn.return = # probe syscall.sys32_adjtimex = kernel.function("sys32_adjtimex") ? { name = "sys32_adjtimex" - buf_uaddr = $utp - argstr = sprintf("%p", buf_uaddr) + argstr = sprintf("%p", $utp) } -probe syscall.sys32_adjtimex.return = - kernel.function("sys32_adjtimex").return ?{ +probe syscall.sys32_adjtimex.return = kernel.function("sys32_adjtimex").return ?{ name = "sys32_adjtimex" retstr = returnstr(1) } + # sys32_getdents ________________________________________ # # asmlinkage long sys32_getdents(unsigned int fd, @@ -984,60 +758,6 @@ probe syscall.compat_clock_settime.return = name = "compat_clock_settime" retstr = returnstr(1) } -# compat_clock_gettime ________________________________________ -# -# long compat_clock_gettime(clockid_t which_clock, -# struct compat_timespec __user *tp) -# -probe syscall.compat_clock_gettime = kernel.function("compat_clock_gettime") ? { - name = "compat_clock_gettime" - which_clock = $which_clock - tp_uaddr = $tp - argstr = sprintf("%d, %p", which_clock, tp_uaddr) -} -probe syscall.compat_clock_gettime.return = - kernel.function("compat_clock_gettime").return ? { - name = "compat_clock_gettime" - retstr = returnstr(1) -} -# compat_clock_getres ________________________________________ -# -# long compat_clock_getres(clockid_t which_clock, -# struct compat_timespec __user *tp) -# -probe syscall.compat_clock_getres = kernel.function("compat_clock_getres") ? { - name = "compat_clock_getres" - which_clock = $which_clock - tp_uaddr = $tp - argstr = sprintf("%d, %p", which_clock, tp_uaddr) -} -probe syscall.compat_clock_getres.return = - kernel.function("compat_clock_getres").return ? { - name = "compat_clock_getres" - 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 syscall.compat_clock_nanosleep = kernel.function("compat_clock_nanosleep") ? { - name = "compat_clock_nanosleep" - clock_id = $which_clock - clock_id_str = _get_wc_str($which_clock) - flags = $flags - flag_str = "TIMER_ABSTIME" - rqtp_uaddr = $rqtp - rmtp_uaddr = $rmtp - argstr = sprintf("%s, %s, %p, %p", clock_id_str, - flag_str, rqtp_uaddr, rmtp_uaddr) -} -probe syscall.compat_clock_nanosleep.return = - kernel.function("compat_clock_nanosleep").return ? { - name = "compat_clock_nanosleep" - retstr = returnstr(1) -} # sys32_swapcontext ________________________________________ # # long sys32_swapcontext(struct ucontext32 __user *old_ctx, @@ -1138,6 +858,60 @@ probe syscall.compat_set_mempolicy.return = name = "compat_set_mempolicy" retstr = returnstr(1) } + +# mmap +# long sys_mmap(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, off_t offset) +# +probe syscall.mmap = kernel.function("sys_mmap") ? { + name = "mmap" + start = $addr + len = $len + prot = $prot + flags = $flags + fd = $fd + offset = $offset + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, + _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $offset) +} + +probe syscall.mmap.return = kernel.function("sys_mmap").return ? { + name = "mmap" + retstr = returnstr(2) +} + +# mmap2 +# long sys_mmap2(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long pgoff) +# long compat_sys_mmap2(unsigned long addr, size_t len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long pgoff) +# +probe syscall.mmap2 = + kernel.function("sys_mmap2") ?, + kernel.function("compat_sys_mmap2") ? +{ + name = "mmap2" + start = $addr + length = $len + prot = $prot + flags = $flags + fd = $fd + pgoffset = $pgoff + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, + $len, _mprotect_prot_str($prot), _mmap_flags($flags), + $fd, $pgoff) +} +probe syscall.mmap2.return = + kernel.function("sys_mmap2").return ?, + kernel.function("compat_sys_mmap2").return ? +{ + name = "mmap2" + retstr = returnstr(2) +} + # ppc64_sys_stime ________________________________________ # # long ppc64_sys_stime(long __user * tptr) diff --git a/tapset/s390x/syscalls.stp b/tapset/s390x/syscalls.stp index b1804388..40a73fd5 100644 --- a/tapset/s390x/syscalls.stp +++ b/tapset/s390x/syscalls.stp @@ -1,22 +1,59 @@ +# S390-specific system calls + %(arch == "s390x" %? -# mmap - s390x version of the syscall.mmap probes +# getresgid __________________________________________________ +# long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid) +# +probe syscall.getresgid16 = kernel.function("sys32_getresgid16") ? +{ + name = "getresgid" + argstr = sprintf("%p, %p, %p", $rgid, $egid, $sgid) +} +probe syscall.getresgid16.return = kernel.function("sys32_getresgid16").return ? +{ + name = "getresgid" + retstr = returnstr(1) +} +# getresuid __________________________________________________ +# long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid) +# +probe syscall.getresuid16 = kernel.function("sys32_getresuid16") ? +{ + name = "getresuid" + argstr = sprintf("%p, %p, %p", $ruid, $euid, $suid) +} +probe syscall.getresuid16.return = kernel.function("sys32_getresuid16").return ? +{ + name = "getresuid" + retstr = returnstr(1) +} + +# ipc _________________________________________________ +# long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) # +probe syscall.ipc = kernel.function("sys32_ipc") ? { + name = "ipc" + argstr = sprintf("%d, %d, %d, %d, %p", $call, $first, $second, $third, $ptr) +} +probe syscall.ipc.return = kernel.function("sys_ipc").return ? { + name = "ipc" + retstr = returnstr(1) +} + +# mmap _________________________________________________ # long old_mmap(struct mmap_arg_struct __user *arg) # long old32_mmap(struct mmap_arg_struct_emu31 __user *arg) # - probe syscall.mmap = kernel.function("old_mmap"), kernel.function("old32_mmap") { name = "mmap" - if ( probefunc() == "old_mmap" ){ - argstr = get_mmap_args($arg); - }else{ - argstr = get_32mmap_args($arg); - } - + if (probefunc() == "old_mmap") + argstr = get_mmap_args($arg) + else + argstr = get_32mmap_args($arg) } probe syscall.mmap.return = kernel.function("old_mmap").return, @@ -27,7 +64,7 @@ probe syscall.mmap.return = kernel.function("old_mmap").return, } -# mmap2 - s390x version of the syscall.mmap2 probes +# mmap2 _________________________________________________ # # long sys_mmap2(struct mmap_arg_struct __user *arg) # long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg) @@ -37,12 +74,10 @@ probe syscall.mmap2 = kernel.function("sys_mmap2"), { name = "mmap2" - if ( probefunc() == "sys_mmap2" ){ - argstr = get_mmap_args($arg); - }else{ - argstr = get_32mmap_args($arg); - } - + if (probefunc() == "sys_mmap2") + argstr = get_mmap_args($arg) + else + argstr = get_32mmap_args($arg) } probe syscall.mmap2.return = kernel.function("sys_mmap2").return, diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp index 48f96635..3243c647 100644 --- a/tapset/syscalls.stp +++ b/tapset/syscalls.stp @@ -95,11 +95,7 @@ probe syscall.add_key.return = kernel.function("sys_add_key").return ? { # long sys_adjtimex(struct timex __user *txc_p) probe syscall.adjtimex = kernel.function("sys_adjtimex") { name = "adjtimex" - buf_uaddr = $txc_p - /* - * buf_modes = __uget_timex_m($txc_p,0) - */ - buf_modes_str = _adjtx_mode_str(buf_modes) + /* * buf_offset = __uget_timex_m($txc_p,1) * buf_freq = __uget_timex_m($txc_p,2) @@ -113,12 +109,21 @@ probe syscall.adjtimex = kernel.function("sys_adjtimex") { * buf_time_tv_usec = __uget_timex_m($txc_p,10) * buf_tick = __uget_timex_m($txc_p,11) */ - argstr = buf_modes_str + argstr = sprintf("%p", $txc_p) } probe syscall.adjtimex.return = kernel.function("sys_adjtimex").return { name = "adjtimex" retstr = returnstr(1) } +# long compat_sys_adjtimex(struct compat_timex __user *utp) +probe syscall.compat_adjtimex = kernel.function("compat_sys_adjtimex") ? { + name = "compat_adjtimex" + argstr = sprintf("%p", $utp) +} +probe syscall.compat_adjtimex.return = kernel.function("compat_sys_adjtimex").return ? { + name = "compat_adjtimex" + retstr = returnstr(1) +} # alarm ______________________________________________________ # unsigned long sys_alarm (unsigned int seconds) @@ -286,28 +291,46 @@ probe syscall.chroot.return = kernel.function("sys_chroot").return { # clock_getres _______________________________________________ # long sys_clock_getres(clockid_t which_clock, struct timespec __user *tp) -probe syscall.clock_getres = kernel.function("sys_clock_getres") { +# long compat_clock_getres(clockid_t which_clock, struct compat_timespec __user *tp) +# +probe syscall.clock_getres = + kernel.function("sys_clock_getres"), + kernel.function("compat_clock_getres") ? +{ name = "clock_getres" clk_id = $which_clock clk_id_str = _get_wc_str($which_clock) res_uaddr = $tp argstr = sprintf("%s, %p", _get_wc_str($which_clock), $tp) } -probe syscall.clock_getres.return = kernel.function("sys_clock_getres").return { +probe syscall.clock_getres.return = + kernel.function("sys_clock_getres").return, + kernel.function("compat_clock_getres").return ? +{ name = "clock_getres" retstr = returnstr(1) } # clock_gettime ______________________________________________ # long sys_clock_gettime(clockid_t which_clock, struct timespec __user *tp) -probe syscall.clock_gettime = kernel.function("sys_clock_gettime") { +# 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") ? +{ name = "clock_gettime" clk_id = $which_clock clk_id_str = _get_wc_str($which_clock) - tp_uaddr = $tp argstr = sprintf("%s, %p", _get_wc_str($which_clock), $tp) } -probe syscall.clock_gettime.return = kernel.function("sys_clock_gettime").return { +probe syscall.clock_gettime.return = + kernel.function("sys_clock_gettime").return, + kernel.function("compat_clock_gettime").return ?, + kernel.function("compat_sys_clock_gettime").return ? +{ name = "clock_gettime" retstr = returnstr(1) } @@ -320,22 +343,34 @@ probe syscall.clock_gettime.return = kernel.function("sys_clock_gettime").return # probe syscall.clock_nanosleep = kernel.function("sys_clock_nanosleep") { name = "clock_nanosleep" - clock_id = $which_clock - clock_id_str = _get_wc_str($which_clock) - flags = $flags - if ($flags == 0) - flag_str = "0" - else - flag_str = "TIMER_ABSTIME" - rqtp_uaddr = $rqtp - rmtp_uaddr = $rmtp - argstr = sprintf("%s, %s, %s, %p", clock_id_str, flag_str, + argstr = sprintf("%s, 0x%x, %s, %p", _get_wc_str($which_clock), $flags, _struct_timespec_u($rqtp), $rmtp) } probe syscall.clock_nanosleep.return = kernel.function("sys_clock_nanosleep").return { 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 syscall.compat_clock_nanosleep = + kernel.function("compat_clock_nanosleep") ?, + kernel.function("compat_sys_clock_nanosleep") ? +{ + name = "compat_clock_nanosleep" + argstr = sprintf("%s, 0x%x, %s, %p", _get_wc_str($which_clock), $flags, + _struct_compat_timespec_u($rqtp), $rmtp) +} +probe syscall.compat_clock_nanosleep.return = + kernel.function("compat_clock_nanosleep").return ?, + kernel.function("compat_sys_clock_nanosleep").return ? +{ + name = "compat_clock_nanosleep" + retstr = returnstr(1) +} # clock_settime ______________________________________________ # long sys_clock_settime(clockid_t which_clock, @@ -499,6 +534,20 @@ probe syscall.execve.return = kernel.function("do_execve").return { name = "execve" retstr = returnstr(1) } +# int compat_do_execve(char * filename, +# compat_uptr_t __user *argv, +# compat_uptr_t __user *envp, +# struct pt_regs * regs) +probe syscall.compat_execve = kernel.function("compat_do_execve") { + name = "compat_execve" + filename = kernel_string($filename) + args = __get_compat_argv($argv) + argstr = sprintf("%s %s", filename, args) +} +probe syscall.compat_execve.return = kernel.function("compat_do_execve").return { + name = "compat_execve" + retstr = returnstr(1) +} # exit _______________________________________________________ # long sys_exit(int error_code) @@ -827,6 +876,37 @@ probe syscall.fstat.return = 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) +# +probe syscall.fstatat = + kernel.function("sys_fstatat64") ?, + kernel.function("sys_newfstatat") ?, + kernel.function("sys32_fstatat64") ? +{ + name = "fstatat" + dirfd = $dfd + path = user_string($filename) + buf_uaddr = $statbuf + + if ($flag == 0x100) + flags = "AT_SYMLINK_NOFOLLOW" + else + flags = sprintf("0x%x", $flag) + + argstr = sprintf("%d, %s, %p, %s", $dfd, user_string_quoted($filename), $statbuf, flags) +} +probe syscall.fstatat.return = + kernel.function("sys_fstatat64").return ?, + kernel.function("sys_newfstatat").return ?, + kernel.function("sys32_fstatat64").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) @@ -1012,15 +1092,18 @@ probe syscall.getdents.return = # getegid ____________________________________________________ # long sys_getegid(void) # long sys_getegid16(void) +# long sys32_getegid16(void) # probe syscall.getegid = kernel.function("sys_getegid16") ?, + kernel.function("sys32_getegid16") ?, kernel.function("sys_getegid") { name = "getegid" } probe syscall.getegid.return = kernel.function("sys_getegid16").return ?, + kernel.function("sys32_getegid16").return ?, kernel.function("sys_getegid").return { name = "getegid" @@ -1029,14 +1112,18 @@ probe syscall.getegid.return = # geteuid ____________________________________________________ # long sys_geteuid(void) +# long sys32_geteuid16(void) +# probe syscall.geteuid = kernel.function("sys_geteuid16") ?, + kernel.function("sys32_geteuid16") ?, kernel.function("sys_geteuid") { name = "geteuid" } probe syscall.geteuid.return = kernel.function("sys_geteuid16").return ?, + kernel.function("sys32_geteuid16").return ?, kernel.function("sys_geteuid").return { name = "geteuid" @@ -1045,14 +1132,18 @@ probe syscall.geteuid.return = # getgid _____________________________________________________ # long sys_getgid(void) +# long sys32_getgid16(void) +# probe syscall.getgid = kernel.function("sys_getgid16") ?, + kernel.function("sys32_getgid16") ?, kernel.function("sys_getgid") { name = "getgid" } probe syscall.getgid.return = kernel.function("sys_getgid16").return ?, + kernel.function("sys32_getgid16").return ?, kernel.function("sys_getgid").return { name = "getgid" @@ -1330,7 +1421,10 @@ probe syscall.getsockname.return = kernel.function("sys_getsockname").return { # char __user *optval, # int __user *optlen) # -probe syscall.getsockopt = kernel.function("sys_getsockopt") { +probe syscall.getsockopt = + kernel.function("sys_getsockopt") ?, + kernel.function("compat_sys_getsockopt") ? +{ name = "getsockopt" fd = $fd level = $level @@ -1342,8 +1436,12 @@ probe syscall.getsockopt = kernel.function("sys_getsockopt") { argstr = sprintf("%d, %s, %s, %p, %p", $fd, _sockopt_level_str($level), _sockopt_optname_str($optname), $optval, $optlen) } -probe syscall.getsockopt.return = kernel.function("sys_getsockopt").return { - name = "getsockopt.return" +probe syscall.getsockopt.return = + kernel.function("sys_getsockopt").return ?, + kernel.function("compat_sys_getsockopt").return ? +{ + name = "getsockopt" + retstr = returnstr(1) } # gettid _____________________________________________________ @@ -1386,15 +1484,18 @@ probe syscall.gettimeofday.return = # getuid _____________________________________________________ # long sys_getuid(void # long sys_getuid16(void) +# long sys32_getuid16(void) # probe syscall.getuid = kernel.function("sys_getuid16") ?, + kernel.function("sys32_getuid16") ?, kernel.function("sys_getuid") { name = "getuid" } probe syscall.getuid.return = kernel.function("sys_getuid16").return ?, + kernel.function("sys32_getuid16").return ?, kernel.function("sys_getuid").return { name = "getuid" @@ -2087,64 +2188,6 @@ probe syscall.mlockall.return = kernel.function("sys_mlockall").return { retstr = returnstr(1) } -%(arch != "s390x" %? -# mmap -# long sys_mmap(unsigned long addr, unsigned long len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, unsigned long off) -probe syscall.mmap = kernel.function("sys_mmap") ? { - name = "mmap" - start = $addr - len = $len - prot = $prot - flags = $flags - fd = $fd -%(arch != "ppc64" %? - offset = $off -%: - offset = $offset -%) - argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, - _mprotect_prot_str($prot), _mmap_flags($flags), $fd, offset) -} - -probe syscall.mmap.return = kernel.function("sys_mmap").return ? { - name = "mmap" - retstr = returnstr(2) -} - -# mmap2 -# long sys_mmap2(unsigned long addr, unsigned long len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, unsigned long pgoff) -# long sys32_mmap2(unsigned long addr, unsigned long len, -# unsigned long prot, unsigned long flags, -# unsigned long fd, unsigned long pgoff) -# -probe syscall.mmap2 = - kernel.function("sys_mmap2") ?, - kernel.function("sys32_mmap2") ? -{ - name = "mmap2" - start = $addr - length = $len - prot = $prot - flags = $flags - fd = $fd - pgoffset = $pgoff - argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, - $len, _mprotect_prot_str($prot), _mmap_flags($flags), - $fd, $pgoff) -} -probe syscall.mmap2.return = - kernel.function("sys_mmap2").return ?, - kernel.function("sys32_mmap2").return ? -{ - name = "mmap2" - retstr = returnstr(2) -} -%) - # modify_ldt _________________________________________________ # int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount) # @@ -2361,6 +2404,18 @@ probe syscall.msgctl.return = kernel.function("sys_msgctl").return { name = "msgctl" retstr = returnstr(1) } +# compat_sys_msgctl ________________________________________ +# +# long compat_sys_msgctl(int first, int second, void __user *uptr) +# +probe syscall.compat_sys_msgctl = kernel.function("compat_sys_msgctl") ? { + name = "compat_sys_msgctl" + argstr = sprintf("%d, %d, %p", $first, $second, $uptr) +} +probe syscall.compat_sys_msgctl.return = kernel.function("compat_sys_msgctl").return ? { + name = "compat_sys_msgctl" + retstr = returnstr(1) +} # msgget _____________________________________________________ # long sys_msgget (key_t key, int msgflg) @@ -2397,6 +2452,19 @@ probe syscall.msgrcv.return = kernel.function("sys_msgrcv").return { name = "msgrcv" retstr = returnstr(1) } +# compat_sys_msgrcv ________________________________________ +# +# long compat_sys_msgrcv(int first, int second, int msgtyp, int third, +# int version, void __user *uptr) +# +probe syscall.compat_sys_msgrcv = kernel.function("compat_sys_msgrcv") ? { + name = "compat_sys_msgrcv" + argstr = sprintf("%d, %d, %d, %p", $first, $second, $third, $uptr) +} +probe syscall.compat_sys_msgrcv.return = kernel.function("compat_sys_msgrcv").return ? { + name = "compat_sys_msgrcv" + retstr = returnstr(1) +} # msgsnd _____________________________________________________ # long sys_msgsnd (int msqid, @@ -2414,7 +2482,20 @@ probe syscall.msgsnd = kernel.function("sys_msgsnd") { } probe syscall.msgsnd.return = kernel.function("sys_msgsnd").return { name = "msgsnd" - retstr = returnstr(1)} + retstr = returnstr(1) +} +# compat_sys_msgsnd ________________________________________ +# +# long compat_sys_msgsnd(int first, int second, int third, void __user *uptr) +# +probe syscall.compat_sys_msgsnd = kernel.function("compat_sys_msgsnd") ? { + name = "compat_sys_msgsnd" + argstr = sprintf("%d, %d, %d, %p", $first, $second, $third, $uptr) +} +probe syscall.compat_sys_msgsnd.return = kernel.function("compat_sys_msgsnd").return ? { + name = "compat_sys_msgsnd" + retstr = returnstr(1) +} # msync ______________________________________________________ # long sys_msync(unsigned long start, size_t len, int flags) diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp index 0554f3cf..79294cd4 100644 --- a/tapset/syscalls2.stp +++ b/tapset/syscalls2.stp @@ -402,26 +402,6 @@ probe syscall.pread.return = kernel.function("sys_pread64").return { name = "pread" retstr = returnstr(1) } -#long sys32_pread64(unsigned int fd, char __user *ubuf, -# size_t count, u32 poshi, u32 poslo) -probe syscall.pread32 = kernel.function("sys32_pread64") ? { - name = "pread" - fd = $fd - buf_uaddr = $buf - count = $count - offset = ($poshi << 32) + $poslo -%( arch == "s390x" %? - buf_uaddr = $ubuf - argstr = sprintf("%d, %p, %d, %d", $fd, $ubuf, $count, ($poshi << 32) + $poslo) -%: - buf_uaddr = $buf - argstr = sprintf("%d, %p, %d, %d", $fd, $buf, $count, ($poshi << 32) + $poslo) -%) -} -probe syscall.pread32.return = kernel.function("sys32_pread64").return ? { - name = "pread" - retstr = returnstr(1) -} # pselect6 _____________________________________________________ # @@ -547,7 +527,7 @@ probe syscall.pwrite32.return = kernel.function("sys32_pwrite64").return ? { # qid_t id, # void __user *addr) # -probe syscall.quotactl = kernel.function("sys_quotactl") { +probe syscall.quotactl = kernel.function("sys_quotactl") ? { name = "quotactl" cmd = $cmd cmd_str = _quotactl_cmd_str($cmd) @@ -556,7 +536,7 @@ probe syscall.quotactl = kernel.function("sys_quotactl") { addr_uaddr = $addr argstr = sprintf("%s, %s, %d, %p", cmd_str, special_str, $id, $addr) } -probe syscall.quotactl.return = kernel.function("sys_quotactl").return { +probe syscall.quotactl.return = kernel.function("sys_quotactl").return ? { name = "quotactl" retstr = returnstr(1) } @@ -685,35 +665,25 @@ probe syscall.reboot.return = kernel.function("sys_reboot").return { } # recv _______________________________________________________ # -# asmlinkage long -# sys_recvfrom(int fd, -# void __user * ubuf, -# size_t size, -# unsigned flags, -# struct sockaddr __user *addr, -# int __user *addr_len) +# long sys_recv(int fd, void __user *ubuf, size_t size, unsigned flags) # -probe syscall.recv = kernel.function("sys_recvfrom") { +probe syscall.recv = kernel.function("sys_recv") ? { name = "recv" s = $fd buf_uaddr = $ubuf len = $size flags = $flags flags_str = _recvflags_str($flags) - addr_uaddr = $addr - addrlen_uaddr = $addr_len - argstr = sprintf("%d, %p, %p, %s, %p, %p", - s, buf_uaddr, len, flags_str, addr_uaddr, - addrlen_uaddr) + argstr = sprintf("%d, %p, %d, %s", $fd, $ubuf, $size, flags_str) } -probe syscall.recv.return = kernel.function("sys_recvfrom").return { +probe syscall.recv.return = kernel.function("sys_recv").return ? { name = "recv" retstr = returnstr(1) } + # recvfrom ___________________________________________________ # -# asmlinkage long -# sys_recvfrom(int fd, +# long sys_recvfrom(int fd, # void __user * ubuf, # size_t size, # unsigned flags, @@ -729,33 +699,50 @@ probe syscall.recvfrom = kernel.function("sys_recvfrom") { flags_str = _recvflags_str($flags) addr_uaddr = $addr addrlen_uaddr = $addr_len - argstr = sprintf("%d, %p, %p, %s, %p, %p", - s, buf_uaddr, len, flags_str, - addr_uaddr, addrlen_uaddr) + argstr = sprintf("%d, %p, %d, %s, %p, %p", + $fd, $ubuf, $size, flags_str, $addr, $addr_len) } -probe syscall.recvfrom.return = kernel.function("sys_recvfrom").return { +probe syscall.recvfrom.return = kernel.function("sys_recvfrom").return ? { name = "recvfrom" retstr = returnstr(1) } + # recvmsg ____________________________________________________ # -# asmlinkage long -# sys_recvmsg(int fd, +# long sys_recvmsg(int fd, # struct msghdr __user *msg, # unsigned int flags) # -probe syscall.recvmsg = kernel.function("sys_recvmsg") { +probe syscall.recvmsg = kernel.function("sys_recvmsg") ? { name = "recvmsg" s = $fd msg_uaddr = $msg flags = $flags flags_str = _recvflags_str($flags) - argstr = sprintf("%d, %p, %s", s, msg_uaddr, flags_str) + argstr = sprintf("%d, %p, %s", $fd, $msg, _recvflags_str($flags)) } -probe syscall.recvmsg.return = kernel.function("sys_recvmsg").return { +probe syscall.recvmsg.return = kernel.function("sys_recvmsg").return ? { name = "recvmsg" retstr = returnstr(1) } +# compat_sys_recvmsg ________________________________________ +# +# long compat_sys_recvmsg(int fd, +# struct compat_msghdr __user *msg, +# unsigned int flags) +# +probe syscall.compat_sys_recvmsg = kernel.function("compat_sys_recvmsg") ? { + name = "compat_sys_recvmsg" + s = $fd + msg_uaddr = $msg + flags = $flags + argstr = sprintf("%d, %p, %s", $fd, $msg, _recvflags_str($flags)) +} +probe syscall.compat_sys_recvmsg.return = kernel.function("compat_sys_recvmsg").return ? { + name = "compat_sys_recvmsg" + retstr = returnstr(1) +} + # remap_file_pages ___________________________________________ # # asmlinkage long @@ -1258,7 +1245,7 @@ probe syscall.compat_select.return = kernel.function("compat_sys_select").return # int cmd, # union semun arg) # -probe syscall.semctl = kernel.function("sys_semctl") { +probe syscall.semctl = kernel.function("sys_semctl") ? { name = "semctl" semid = $semid semnum = $semnum @@ -1267,67 +1254,97 @@ probe syscall.semctl = kernel.function("sys_semctl") { * unsupported type tag identifier '$arg' * arg = $arg */ - argstr = sprintf("%d, %d, %s", semid, semnum, _semctl_cmd(cmd)) + argstr = sprintf("%d, %d, %s", $semid, $semnum, _semctl_cmd($cmd)) } -probe syscall.semctl.return = kernel.function("sys_semctl").return { +probe syscall.semctl.return = kernel.function("sys_semctl").return ? { name = "semctl" retstr = returnstr(1) } +# compat_sys_semctl ________________________________________ +# +# long compat_sys_semctl(int first, int second, int third, void __user *uptr) +# +probe syscall.compat_sys_semctl = kernel.function("compat_sys_semctl") ? { + name = "compat_sys_semctl" + argstr = sprintf("%d, %d, $d, %p", $first, $second, $third, $uptr) +} +probe syscall.compat_sys_semctl.return = kernel.function("compat_sys_semctl").return ? { + name = "compat_sys_semctl" + retstr = returnstr(1) +} # semget _____________________________________________________ # long sys_semget (key_t key, int nsems, int semflg) # -probe syscall.semget = kernel.function("sys_semget") { +probe syscall.semget = kernel.function("sys_semget") ? { name = "semget" key = $key nsems = $nsems semflg = $semflg - argstr = sprintf("%d, %d, %s", key, nsems, __sem_flags(semflg)) + argstr = sprintf("%d, %d, %s", $key, $nsems, __sem_flags($semflg)) } -probe syscall.semget.return = kernel.function("sys_semget").return { +probe syscall.semget.return = kernel.function("sys_semget").return ? { name = "semget" retstr = returnstr(1) } # semop ______________________________________________________ # -# asmlinkage long -# sys_semop (int semid, +# long sys_semop (int semid, # struct sembuf __user *tsops, # unsigned nsops) # -probe syscall.semop = kernel.function("sys_semtimedop") { +probe syscall.semop = kernel.function("sys_semtimedop") ? { name = "semop" semid = $semid tsops_uaddr = $tsops nsops = $nsops - argstr = sprintf("%d, %p, %d", semid, tsops_uaddr, nsops) + argstr = sprintf("%d, %p, %d", $semid, $tsops, $nsops) } -probe syscall.semop.return = kernel.function("sys_semtimedop").return { +probe syscall.semop.return = kernel.function("sys_semtimedop").return ? { name = "semop" retstr = returnstr(1) } + # semtimedop _________________________________________________ # -# asmlinkage long -# sys_semtimedop(int semid, +# long sys_semtimedop(int semid, # struct sembuf __user *tsops, # unsigned nsops, # const struct timespec __user *timeout) # -probe syscall.semtimedop = kernel.function("sys_semtimedop") { +probe syscall.semtimedop = kernel.function("sys_semtimedop") ? { name = "semtimedop" semid = $semid sops_uaddr = $tsops nsops = $nsops timeout_uaddr = $timeout - argstr = sprintf("%d, %p, %d, %s", semid, sops_uaddr, nsops, - _struct_timespec_u(timeout_uaddr)) + argstr = sprintf("%d, %p, %d, %s", $semid, $tsops, $nsops, + _struct_timespec_u($timeout)) } -probe syscall.semtimedop.return = kernel.function("sys_semtimedop").return { +probe syscall.semtimedop.return = kernel.function("sys_semtimedop").return ? { name = "semtimedop" retstr = returnstr(1) } +# compat_sys_semtimedop ________________________________________ +# +# long compat_sys_semtimedop(int semid, struct sembuf __user *tsems, +# unsigned nsops, const struct compat_timespec __user *timeout) +# +probe syscall.compat_sys_semtimedop = kernel.function("compat_sys_semtimedop") { + name = "compat_sys_semtimedop" + semid = $semid + sops_uaddr = tsems + nsops = $nsops + timeout_uaddr = $timeout + argstr = sprintf("%d, %p, %d, %s", $semid, $tsems, $nsops, + _struct_compat_timespec_u($timeout)) +} +probe syscall.compat_sys_semtimedop.return = kernel.function("compat_sys_semtimedop").return { + name = "compat_sys_semtimedop" + retstr = returnstr(1) +} + # send _______________________________________________________ # # long sys_send(int fd, @@ -1335,7 +1352,7 @@ probe syscall.semtimedop.return = kernel.function("sys_semtimedop").return { # size_t len, # unsigned flags) # -probe syscall.send = kernel.function("sys_send") { +probe syscall.send = kernel.function("sys_send") ? { name = "send" s = $fd buf_uaddr = $buff @@ -1344,10 +1361,11 @@ probe syscall.send = kernel.function("sys_send") { flags_str = _send_flags_str($flags) argstr = sprintf("%d, %p, %s", $fd, $buff, flags_str) } -probe syscall.send.return = kernel.function("sys_send").return { +probe syscall.send.return = kernel.function("sys_send").return ? { name = "send" retstr = returnstr(1) } + # sendfile ___________________________________________________ # # ssize_t sys_sendfile[64](int out_fd, @@ -1377,22 +1395,36 @@ probe syscall.sendfile.return = # sendmsg ____________________________________________________ # -# long sys_sendmsg(int fd, -# struct msghdr __user *msg, -# unsigned flags) +# long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags) # -probe syscall.sendmsg = kernel.function("sys_sendmsg") { +probe syscall.sendmsg = kernel.function("sys_sendmsg") ? { name = "sendmsg" s = $fd msg_uaddr = $msg flags = $flags flags_str = _send_flags_str($flags) - argstr = sprintf("%d, %p, %s", $fd, $msg, flags_str) + argstr = sprintf("%d, %p, %s", $fd, $msg, _send_flags_str($flags)) } -probe syscall.sendmsg.return = kernel.function("sys_sendmsg").return { +probe syscall.sendmsg.return = kernel.function("sys_sendmsg").return ? { name = "sendmsg" retstr = returnstr(1) } +# compat_sys_sendmsg ________________________________________ +# +# long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, unsigned flags) +# +probe syscall.compat_sys_sendmsg = kernel.function("compat_sys_sendmsg") ? { + name = "compat_sys_sendmsg" + s = $fd + msg_uaddr = $msg + flags = $flags + argstr = sprintf("%d, %p, %s", $fd, $msg, _send_flags_str($flags)) +} +probe syscall.compat_sys_sendmsg.return = kernel.function("compat_sys_sendmsg").return ? { + name = "compat_sys_sendmsg" + retstr = returnstr(1) +} + # sendto _____________________________________________________ # # long sys_sendto(int fd, @@ -1402,7 +1434,7 @@ probe syscall.sendmsg.return = kernel.function("sys_sendmsg").return { # struct sockaddr __user *addr, # int addr_len) # -probe syscall.sendto = kernel.function("sys_sendto") { +probe syscall.sendto = kernel.function("sys_sendto") ? { name = "sendto" s = $fd buf_uaddr = $buff @@ -1414,10 +1446,11 @@ probe syscall.sendto = kernel.function("sys_sendto") { argstr = sprintf("%d, %p, %d, %s, %p, %d", $fd, $buff, $len, flags_str, $addr, $addr_len) } -probe syscall.sendto.return = kernel.function("sys_sendto").return { +probe syscall.sendto.return = kernel.function("sys_sendto").return ? { name = "sendto" retstr = returnstr(1) } + # setdomainname ______________________________________________ # # asmlinkage long @@ -1763,8 +1796,7 @@ probe syscall.setrlimit.return = kernel.function("sys_setrlimit").return { } # setsid _____________________________________________________ # -# asmlinkage long -# sys_setsid(void) +# long sys_setsid(void) # probe syscall.setsid = kernel.function("sys_setsid") { name = "setsid" @@ -1774,16 +1806,19 @@ probe syscall.setsid.return = kernel.function("sys_setsid").return { name = "setsid" retstr = returnstr(1) } + # setsockopt _________________________________________________ # -# asmlinkage long -# sys_setsockopt(int fd, +# long sys_setsockopt(int fd, # int level, # int optname, # char __user *optval, # int optlen) # -probe syscall.setsockopt = kernel.function("sys_setsockopt") { +probe syscall.setsockopt = + kernel.function("sys_setsockopt") ?, + kernel.function("compat_sys_setsockopt") ? +{ name = "setsockopt" fd = $fd level = $level @@ -1793,12 +1828,16 @@ probe syscall.setsockopt = kernel.function("sys_setsockopt") { optval_uaddr = $optval optlen = $optlen argstr = sprintf("%d, %s, %s, %p, %d", $fd, level_str, - optname_str, optval_uaddr, $optlen) + optname_str, $optval, $optlen) } -probe syscall.setsockopt.return = kernel.function("sys_setsockopt").return { +probe syscall.setsockopt.return = + kernel.function("sys_setsockopt").return ?, + kernel.function("compat_sys_setsockopt").return ? +{ name = "setsockopt" retstr = returnstr(1) } + # set_tid_address ____________________________________________ # # asmlinkage long @@ -1908,71 +1947,117 @@ probe syscall.sgetmask.return = kernel.function("sys_sgetmask").return ? { name = "sgetmask" retstr = returnstr(1) } + +# shmat ______________________________________________________ +# +# long sys_shmat(int shmid, char __user *shmaddr, int shmflg) +# +probe syscall.shmat = kernel.function("sys_shmat") ? { + name = "shmat" + shmid = $shmid + shmaddr_uaddr = $shmaddr + shmflg = $shmflg + argstr = sprintf("%d, %p, %s", $shmid, $shmaddr, _shmat_flags_str($shmflg)) +} +probe syscall.shmat.return = kernel.function("sys_shmat").return ? { + name = "shmat" + retstr = returnstr(1) +} +# compat_sys_shmat ________________________________________ +# +# long compat_sys_shmat(int first, int second, compat_uptr_t third, +# int version, void __user *uptr) +# +probe syscall.compat_sys_shmat = kernel.function("compat_sys_shmat") ? { + name = "compat_sys_shmat" + first = $first + second = $second + third = $third + uptr_uaddr = $uptr + argstr = sprintf("%d, %d, %d, %d, %p", $first, $second, $third, $version, $uptr) +} +probe syscall.compat_sys_shmat.return = kernel.function("compat_sys_shmat").return ? { + name = "compat_sys_shmat" + retstr = returnstr(1) +} + # shmctl _____________________________________________________ # -# asmlinkage long -# sys_shmctl (int shmid, +# long sys_shmctl (int shmid, # int cmd, # struct shmid_ds __user *buf) # -probe syscall.shmctl = kernel.function("sys_shmctl") { +probe syscall.shmctl = kernel.function("sys_shmctl") ? { name = "shmctl" shmid = $shmid cmd = $cmd buf_uaddr = $buf - argstr = sprintf("%d, %s, %p", $shmid, _semctl_cmd($cmd), - buf_uaddr) + argstr = sprintf("%d, %s, %p", $shmid, _semctl_cmd($cmd), $buf) } -probe syscall.shmctl.return = kernel.function("sys_shmctl").return { +probe syscall.shmctl.return = kernel.function("sys_shmctl").return ? { name = "shmctl" retstr = returnstr(1) } +# compat_sys_shmctl ________________________________________ +# +# long compat_sys_shmctl(int first, int second, void __user *uptr) +# +probe syscall.compat_sys_shmctl = kernel.function("compat_sys_shmctl") ? { + name = "compat_sys_shmctl" + first = $first + second = $second + uptr_uaddr = $uptr + argstr = sprintf("%d, %d, %p", $first, $second, $uptr) +} +probe syscall.compat_sys_shmctl.return = kernel.function("compat_sys_shmctl").return ? { + name = "compat_sys_shmctl" + retstr = returnstr(1) +} + # shmdt ______________________________________________________ # -# asmlinkage long -# sys_shmdt(char __user *shmaddr) +# long sys_shmdt(char __user *shmaddr) # -probe syscall.shmdt = kernel.function("sys_shmdt") { +probe syscall.shmdt = kernel.function("sys_shmdt") ? { name = "shmdt" shmaddr_uaddr = $shmaddr - argstr = sprintf("%p", shmaddr_uaddr) + argstr = sprintf("%p", $shmaddr) } -probe syscall.shmdt.return = kernel.function("sys_shmdt").return { +probe syscall.shmdt.return = kernel.function("sys_shmdt").return ? { name = "shmdt" retstr = returnstr(1) } + # shmget _____________________________________________________ # -# asmlinkage long -# sys_shmget (key_t key, +# long sys_shmget (key_t key, # size_t size, # int shmflg) # -probe syscall.shmget = kernel.function("sys_shmget") { +probe syscall.shmget = kernel.function("sys_shmget") ? { name = "shmget" key = $key size = $size shmflg = $shmflg argstr = sprintf("%d, %d, %d", $key, $size, $shmflg) } -probe syscall.shmget.return = kernel.function("sys_shmget").return { +probe syscall.shmget.return = kernel.function("sys_shmget").return ? { name = "shmget" retstr = returnstr(1) } + # shutdown ___________________________________________________ # -# asmlinkage long -# sys_shutdown(int fd, -# int how) +# long sys_shutdown(int fd, int how) # -probe syscall.shutdown = kernel.function("sys_shutdown") { +probe syscall.shutdown = kernel.function("sys_shutdown") ? { name = "shutdown" s = $fd how = $how how_str = _shutdown_how_str($how) - argstr = sprintf("%d, %s", s, how_str) + argstr = sprintf("%d, %s", $fd, how_str) } -probe syscall.shutdown.return = kernel.function("sys_shutdown").return { +probe syscall.shutdown.return = kernel.function("sys_shutdown").return ? { name = "shutdown" retstr = returnstr(1) } @@ -2084,7 +2169,7 @@ probe syscall.sigsuspend.return = # socket _____________________________________________________ # long sys_socket(int family, int type, int protocol) # -probe syscall.socket = kernel.function("sys_socket") { +probe syscall.socket = kernel.function("sys_socket") ? { name = "socket" family = $family type = $type @@ -2093,7 +2178,7 @@ probe syscall.socket = kernel.function("sys_socket") { _sock_type_str($type), $protocol) } -probe syscall.socket.return = kernel.function("sys_socket").return { +probe syscall.socket.return = kernel.function("sys_socket").return ? { name = "socket" retstr = returnstr(1) } @@ -2101,9 +2186,7 @@ probe syscall.socket.return = kernel.function("sys_socket").return { # commented out because this seems redundant # socketcall _________________________________________________ # -# asmlinkage long -# sys_socketcall(int call, -# unsigned long __user *args) +# long sys_socketcall(int call, unsigned long __user *args) # #probe syscall.socketcall = kernel.function("sys_socketcall") { # name = "socketcall" @@ -2122,7 +2205,7 @@ probe syscall.socket.return = kernel.function("sys_socket").return { # int protocol, # int __user *usockvec) # -probe syscall.socketpair = kernel.function("sys_socketpair") { +probe syscall.socketpair = kernel.function("sys_socketpair") ? { name = "socketpair" family = $family type = $type @@ -2133,10 +2216,11 @@ probe syscall.socketpair = kernel.function("sys_socketpair") { _sock_type_str($type), $protocol, sv_uaddr) } -probe syscall.socketpair.return = kernel.function("sys_socketpair").return { +probe syscall.socketpair.return = kernel.function("sys_socketpair").return ? { name = "socketpair" retstr = returnstr(1) } + # ssetmask ___________________________________________________ # # asmlinkage long @@ -2249,12 +2333,12 @@ probe syscall.stime.return = kernel.function("sys_stime").return ?{ # asmlinkage long # sys_swapoff(const char __user * specialfile) # -probe syscall.swapoff = kernel.function("sys_swapoff") { +probe syscall.swapoff = kernel.function("sys_swapoff")? { name = "swapoff" path = user_string($specialfile) argstr = user_string_quoted($specialfile) } -probe syscall.swapoff.return = kernel.function("sys_swapoff").return { +probe syscall.swapoff.return = kernel.function("sys_swapoff").return ? { name = "swapoff" retstr = returnstr(1) } @@ -2264,13 +2348,13 @@ probe syscall.swapoff.return = kernel.function("sys_swapoff").return { # sys_swapon(const char __user * specialfile, # int swap_flags) # -probe syscall.swapon = kernel.function("sys_swapon") { +probe syscall.swapon = kernel.function("sys_swapon") ? { name = "swapon" path = user_string($specialfile) swapflags = $swap_flags argstr = sprintf("%s, %d", user_string_quoted($specialfile), swapflags) } -probe syscall.swapon.return = kernel.function("sys_swapon").return { +probe syscall.swapon.return = kernel.function("sys_swapon").return ? { name = "swapon" retstr = returnstr(1) } @@ -2303,18 +2387,24 @@ probe syscall.sync.return = kernel.function("sys_sync").return { } # sysctl _____________________________________________________ # -# asmlinkage long -# sys_sysctl(struct __sysctl_args __user *args) +# long sys_sysctl(struct __sysctl_args __user *args) +# long sys32_sysctl(struct __sysctl_args32 __user *args) # -probe syscall.sysctl = kernel.function("sys_sysctl") { +probe syscall.sysctl = + kernel.function("sys_sysctl"), + kernel.function("sys32_sysctl") ? +{ name = "sysctl" - args_uaddr = $args - argstr = sprintf("%p", args_uaddr) + argstr = sprintf("%p", $args) } -probe syscall.sysctl.return = kernel.function("sys_sysctl").return { +probe syscall.sysctl.return = + kernel.function("sys_sysctl").return, + kernel.function("sys32_sysctl").return ? +{ name = "sysctl" retstr = returnstr(1) } + # sysfs ______________________________________________________ # # asmlinkage long diff --git a/tapset/x86_64/syscalls.stp b/tapset/x86_64/syscalls.stp index e97a941e..de070a7d 100644 --- a/tapset/x86_64/syscalls.stp +++ b/tapset/x86_64/syscalls.stp @@ -1,3 +1,5 @@ +# x86_64-specific system calls + # arch_prctl _________________________________________________ # long sys_arch_prctl(int code, unsigned long addr) # @@ -47,4 +49,24 @@ probe syscall.sigaltstack.return = kernel.function("sys_sigaltstack").return { retstr = returnstr(1) } +# mmap +# long sys_mmap(unsigned long addr, unsigned long len, +# unsigned long prot, unsigned long flags, +# unsigned long fd, unsigned long off) +probe syscall.mmap = kernel.function("sys_mmap") ? { + name = "mmap" + start = $addr + len = $len + prot = $prot + flags = $flags + fd = $fd + offset = $off + argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, + _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $off) +} + +probe syscall.mmap.return = kernel.function("sys_mmap").return ? { + name = "mmap" + retstr = returnstr(2) +} |