From cda594dbd5908e097ead97b6506c2eb8250fc020 Mon Sep 17 00:00:00 2001 From: hunt Date: Tue, 30 May 2006 20:25:07 +0000 Subject: [PATCH] 2006-05-30 Martin Hunt * aux_syscalls.stp (_mountflags_str): Rewrite. (_umountflags_str): New. --- tapset/ChangeLog | 5 +++ tapset/aux_syscalls.stp | 76 ++++++++++++++++++++++++++++++++--------- tapset/syscalls.stp | 43 ++++++++++++----------- tapset/syscalls2.stp | 28 +++------------ 4 files changed, 89 insertions(+), 63 deletions(-) diff --git a/tapset/ChangeLog b/tapset/ChangeLog index 37cc7877e..b6fea641f 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,5 +1,10 @@ 2006-05-30 Martin Hunt + * aux_syscalls.stp (_mountflags_str): Rewrite. + (_umountflags_str): New. + + * syscalls.stp (fstatfs.return): Add retstr. + * syscalls2.stp (sys_write): Use text_strn(). * syscalls.stp (sys_lseek): Fix. (sys_llseek): Fix. diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp index aa0b8039f..a7370f61f 100644 --- a/tapset/aux_syscalls.stp +++ b/tapset/aux_syscalls.stp @@ -421,6 +421,7 @@ function __sem_flags:string(semflg:long) function __fork_flags:string(flags:long) %{ /* pure */ + int len; long flags = THIS->flags; char *str = THIS->__retvalue; if (flags & CLONE_FS) @@ -451,7 +452,9 @@ function __fork_flags:string(flags:long) strlcat(str, "CLONE_CHILD_SETTID|", MAXSTRINGLEN); if (flags & CLONE_STOPPED) strlcat(str, "CLONE_STOPPED|", MAXSTRINGLEN); - str[strlen(str)-1] = 0; + len = strlen(str); + if (len) + str[strlen(str)-1] = 0; %} /* This function copies an argv from userspace. */ @@ -949,22 +952,61 @@ function _futex_op_str(op) { return "" } -function _mountflags_str(op) { - if(op==1) return "MS_RDONLY" - if(op==2) return "MS_NOSUID" - if(op==4) return "MS_NODEV" - if(op==8) return "MS_NOEXEC" - if(op==16) return "MS_SYNCHRONOUS" - if(op==32) return "MS_REMOUNT" - if(op==64) return "MS_MANDLOCK" - if(op==128) return "S_WRITE" - if(op==256) return "S_APPEND" - if(op==512) return "S_IMMUTABLE" - if(op==1024) return "MS_NOATIME" - if(op==2048) return "MS_NODIRATIME" - if(op==4096) return "MS_BIND" - return "" -} +function _mountflags_str:string(op:long) +%{ /* pure */ + int len, op = THIS->op; + char *str = THIS->__retvalue; + if (op & MS_BIND) + strlcat(str,"MS_BIND|",MAXSTRINGLEN); + if (op & MS_DIRSYNC) + strlcat(str,"MS_DIRSYNC|",MAXSTRINGLEN); + if (op & MS_MANDLOCK) + strlcat(str,"MS_MANDLOCK|",MAXSTRINGLEN); + if (op & MS_MOVE) + strlcat(str,"MS_MOVE|",MAXSTRINGLEN); + if (op & MS_NOATIME) + strlcat(str,"MS_NOATIME|",MAXSTRINGLEN); + if (op & MS_NODEV) + strlcat(str,"MS_NODEV|",MAXSTRINGLEN); + if (op & MS_NODIRATIME) + strlcat(str,"MS_NODIRATIME|",MAXSTRINGLEN); + if (op & MS_NOEXEC) + strlcat(str,"MS_NOEXEC|",MAXSTRINGLEN); + if (op & MS_NOSUID) + strlcat(str,"MS_NOSUID|",MAXSTRINGLEN); + if (op & MS_RDONLY) + strlcat(str,"MS_RDONLY|",MAXSTRINGLEN); + if (op & MS_REC) + strlcat(str,"MS_REC|",MAXSTRINGLEN); + if (op & MS_REMOUNT) + strlcat(str,"MS_REMOUNT|",MAXSTRINGLEN); + if (op & MS_SYNCHRONOUS) + strlcat(str,"MS_SYNCHRONOUS|",MAXSTRINGLEN); + if (op & MS_VERBOSE) + strlcat(str,"MS_VERBOSE|",MAXSTRINGLEN); + len = strlen(str); + if (len) + str[strlen(str)-1] = 0; +%} + +function _umountflags_str:string(op:long) +%{ /* pure */ + int len, op = THIS->op; + char *str = THIS->__retvalue; + if (op == 0) + strlcat(str,"0",MAXSTRINGLEN); + else { + if (op & MNT_FORCE) + strlcat(str,"MNT_FORCE|",MAXSTRINGLEN); + if (op & MNT_DETACH) + strlcat(str,"MNT_DETACH|",MAXSTRINGLEN); + if (op & MNT_EXPIRE) + strlcat(str,"MNT_EXPIRE|",MAXSTRINGLEN); + len = strlen(str); + if (len) + str[strlen(str)-1] = 0; + } +%} function _statfs_f_type_str(f) { if(f==0xadf5) return "ADFS_SUPER_MAGIC" diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp index 67b1d1850..b1db1d767 100644 --- a/tapset/syscalls.stp +++ b/tapset/syscalls.stp @@ -699,6 +699,7 @@ probe syscall.fstatfs = kernel.function("sys_fstatfs") { } probe syscall.fstatfs.return = kernel.function("sys_fstatfs").return { name = "fstatfs" + retstr = returnstr(1) } # fstatfs64 __________________________________________________ @@ -1685,28 +1686,26 @@ probe kernel.syscall.modify_ldt.return = name = "modify_ldt.return" } # mount ______________________________________________________ -/* - * asmlinkage long - * sys_mount(char __user * dev_name, - * char __user * dir_name, - * char __user * type, - * unsigned long flags, - * void __user * data) - */ -probe kernel.syscall.mount = - kernel.function("sys_mount") { - name = "mount" - source_uaddr = $dev_name - target_uaddr = $dir_name - filesystemtype_uaddr = $type - mountflags = $flags - mountflags_str = _mountflags_str($flags) - data_uaddr = $data - } -probe kernel.syscall.mount.return = - kernel.function("sys_mount").return { - name = "mount.return" - } +# long sys_mount(char __user * dev_name, +# char __user * dir_name, +# char __user * type, +# unsigned long flags, +# void __user * data) +probe syscall.mount = kernel.function("sys_mount") { + name = "mount" + source = user_string($dev_name) + target = user_string($dir_name) + filesystemtype = user_string($type) + mountflags = $flags + mountflags_str = _mountflags_str($flags) + data = text_strn(user_string($data),30,1) + argstr = sprintf("\"%s\", \"%s\", \"%s\", %s, %s", source, target, filesystemtype, mountflags_str, data) +} +probe syscall.mount.return = kernel.function("sys_mount").return { + name = "mount" + retstr = returnstr(1) +} + # mprotect ___________________________________________________ /* * asmlinkage long diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp index 3ec69d008..13bb8c6da 100644 --- a/tapset/syscalls2.stp +++ b/tapset/syscalls2.stp @@ -196,22 +196,6 @@ probe syscall.old_getrlimit.return = kernel.function("sys_old_getrlimit").return name = "old_getrlimit" retstr = returnstr(1) } -# oldumount __________________________________________________ -# -# asmlinkage long -# sys_oldumount(char __user * name) -# -probe syscall.oldumount = kernel.function("sys_umount") { - name = "oldumount" - name_str = user_string($name) - /* man page 2 umount shows the argument name as "target" */ - target = name_str - argstr = name_str -} -probe syscall.oldumount.return = kernel.function("sys_umount").return { - name = "oldumount" - retstr = returnstr(1) -} # pause ______________________________________________________ # # sys_pause(void) @@ -2222,18 +2206,14 @@ probe syscall.truncate64.return = kernel.function("sys_truncate64").return { retstr = returnstr(1) } # umount _____________________________________________________ -# -# asmlinkage long -# sys_umount(char __user * name, -# int flags) +# long sys_umount(char __user * name, int flags) # probe syscall.umount = kernel.function("sys_umount") { name = "umount" - target_uaddr = $name - name_str = user_string($name) + target = user_string($name) flags = $flags - flags_str = _mountflags_str($flags) - argstr = sprintf("%s, %s", name_str, flags_str) + flags_str = _umountflags_str($flags) + argstr = sprintf("\"%s\", %s", target, flags_str) } probe syscall.umount.return = kernel.function("sys_umount").return { name = "umount" -- 2.43.5