diff options
author | zhaolei <zhaolei> | 2007-10-15 05:24:01 +0000 |
---|---|---|
committer | zhaolei <zhaolei> | 2007-10-15 05:24:01 +0000 |
commit | 487ab975166234c1543e8ac09b36853053ad6675 (patch) | |
tree | 14eeaa1fedf37b260564f0f23cacad4feee1579e | |
parent | 1969b5bca1098bb03f8bcffc5cc940102a67744c (diff) | |
download | systemtap-steved-487ab975166234c1543e8ac09b36853053ad6675.tar.gz systemtap-steved-487ab975166234c1543e8ac09b36853053ad6675.tar.xz systemtap-steved-487ab975166234c1543e8ac09b36853053ad6675.zip |
2007-10-15 Zhaolei <zhaolei@cn.fujitsu.com>
From Cai Fei <caifei@cn.fujitsu.com>
* conversions.stp: Add a function kernel_string_n for copy
non-0-terminated string with fixed length from kernel space at
given address.
* stapfuncs.5.in: Add kernel_string_n.
* nfsd.stp: Using kernel_string_n to copy non-0-terminated string
with fixed length from kernel space at given address.
* nfs_proc.stp: Ditto.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | stapfuncs.5.in | 6 | ||||
-rw-r--r-- | tapset/ChangeLog | 11 | ||||
-rw-r--r-- | tapset/conversions.stp | 13 | ||||
-rw-r--r-- | tapset/nfs_proc.stp | 36 | ||||
-rw-r--r-- | tapset/nfsd.stp | 32 |
6 files changed, 75 insertions, 34 deletions
@@ -1,3 +1,14 @@ +2007-10-15 Zhaolei <zhaolei@cn.fujitsu.com> + + From Cai Fei <caifei@cn.fujitsu.com> + * conversions.stp: Add a function kernel_string_n for copy + non-0-terminated string with fixed length from kernel space at + given address. + * stapfuncs.5.in: Add kernel_string_n. + * nfsd.stp: Using kernel_string_n to copy non-0-terminated string + with fixed length from kernel space at given address. + * nfs_proc.stp: Ditto. + 2007-10-12 David Smith <dsmith@redhat.com> * tapsets.cxx (dwflpp::setup): Added 'debuginfo_needed' parameter diff --git a/stapfuncs.5.in b/stapfuncs.5.in index fe8c45b8..f771fd5a 100644 --- a/stapfuncs.5.in +++ b/stapfuncs.5.in @@ -73,6 +73,12 @@ or if a user-space access would cause a fault. kernel_string:string (addr:long) Copy a 0-terminated string from kernel space at given address. .TP +kernel_string_n:string (addr:long, n:long) +Similar with kernel_string, except that not more than n bytes are copied. +Thus, if there are null bytes among the first n bytes, it is same as +kernel_string(addr). If not, n bytes will be copied and a null byte will +be padded to the end. +.TP kernel_long:long (addr:long) Copy a long from kernel space at given address. .TP diff --git a/tapset/ChangeLog b/tapset/ChangeLog index f87de8ba..509b09c9 100644 --- a/tapset/ChangeLog +++ b/tapset/ChangeLog @@ -1,3 +1,14 @@ +2007-10-15 Zhaolei <zhaolei@cn.fujitsu.com> + + From Cai Fei <caifei@cn.fujitsu.com> + * conversions.stp: Add a function kernel_string_n for copy + non-0-terminated string with fixed length from kernel space at + given address. + * stapfuncs.5.in: Add kernel_string_n. + * nfsd.stp: Using kernel_string_n to copy non-0-terminated string + with fixed length from kernel space at given address. + * nfs_proc.stp: Ditto. + 2007-10-12 Zhaolei <zhaolei@cn.fujitsu.com> * queue_stats.stp (qsq_start): Fix problem that compile fails when diff --git a/tapset/conversions.stp b/tapset/conversions.stp index e894e4fa..af993992 100644 --- a/tapset/conversions.stp +++ b/tapset/conversions.stp @@ -18,6 +18,19 @@ deref_fault: /* branched to from deref_string() */ } %} +function kernel_string_n:string (addr:long, n:long) %{ /* pure */ + char *destination = THIS->__retvalue; + long len = THIS->n + 1; + len = (len > MAXSTRINGLEN) ? MAXSTRINGLEN : len; + deref_string (destination, THIS->addr, len); + if (0) { +deref_fault: /* branched to from deref_string() */ + snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer), + "kernel string copy fault at 0x%p", (void *) (uintptr_t) THIS->addr); + CONTEXT->last_error = CONTEXT->error_buffer; + } +%} + function kernel_long:long (addr:long) %{ /* pure */ THIS->__retvalue = kread((long *) (intptr_t) THIS->addr); if (0) { diff --git a/tapset/nfs_proc.stp b/tapset/nfs_proc.stp index bd7baa80..af57a14e 100644 --- a/tapset/nfs_proc.stp +++ b/tapset/nfs_proc.stp @@ -227,8 +227,8 @@ probe nfs.proc2.lookup = kernel.function("nfs_proc_lookup")?, prot = __i2n_ip_proto($dir,1) version =2 - filename = kernel_string($name->name) - name_len = $name->len + name_len = $name->len + filename = kernel_string_n($name->name, name_len) name = "nfs.proc2.lookup" argstr = sprintf("%s",filename) @@ -250,8 +250,8 @@ probe nfs.proc3.lookup = kernel.function("nfs3_proc_lookup")?, prot = __i2n_ip_proto($dir,1) version =3 - filename = kernel_string($name->name) - name_len = $name->len + name_len = $name->len + filename = kernel_string_n($name->name, name_len) name = "nfs.proc3.lookup" argstr = sprintf("%s",filename) @@ -274,8 +274,8 @@ probe nfs.proc4.lookup = kernel.function("nfs4_proc_lookup")?, prot = __i2n_ip_proto($dir,1) version =4 - filename = kernel_string($name->name) - name_len = $name->len + name_len = $name->len + filename = kernel_string_n($name->name, name_len) bitmask0 = __nfsv4_bitmask($dir,0) bitmask1 = __nfsv4_bitmask($dir,1) @@ -1339,8 +1339,8 @@ probe nfs.proc2.create = kernel.function("nfs_proc_create")?, version =2 fh = __getfh_inode($dir) - filename = kernel_string($dentry->d_name->name) filelen = $dentry->d_name->len + filename = kernel_string_n($dentry->d_name->name, filelen) mode = $sattr->ia_mode name = "nfs.proc2.create" @@ -1363,8 +1363,8 @@ probe nfs.proc3.create = kernel.function("nfs3_proc_create")?, version =3 fh = __getfh_inode($dir) - filename = kernel_string($dentry->d_name->name) filelen = $dentry->d_name->len + filename = kernel_string_n($dentry->d_name->name, filelen) flag = $flags mode = $sattr->ia_mode @@ -1388,8 +1388,8 @@ probe nfs.proc4.create = kernel.function("nfs4_proc_create")?, version =4 fh = __getfh_inode($dir) - filename = kernel_string($dentry->d_name->name) filelen = $dentry->d_name->len + filename = kernel_string_n($dentry->d_name->name, filelen) flag = $flags mode = $sattr->ia_mode @@ -1435,8 +1435,8 @@ probe nfs.proc2.remove = kernel.function("nfs_proc_remove")?, version =2 fh = __getfh_inode($dir) - filename = kernel_string($name->name) filelen = $name->len + filename = kernel_string_n($name->name, filelen) name = "nfs.proc2.remove" argstr = sprintf("%s",filename) @@ -1458,8 +1458,8 @@ probe nfs.proc3.remove = kernel.function("nfs3_proc_remove")?, version =3 fh = __getfh_inode($dir) - filename = kernel_string($name->name) filelen = $name->len + filename = kernel_string_n($name->name, filelen) name = "nfs.proc3.remove" argstr = sprintf("%s",filename) @@ -1481,8 +1481,8 @@ probe nfs.proc4.remove = kernel.function("nfs4_proc_remove")?, version =4 fh = __getfh_inode($dir) - filename = kernel_string($name->name) filelen = $name->len + filename = kernel_string_n($name->name, filelen) name = "nfs.proc4.remove" argstr = sprintf("%s",filename) @@ -1529,11 +1529,11 @@ probe nfs.proc2.rename = kernel.function("nfs_proc_rename")?, version =2 old_fh = __getfh_inode($old_dir) - old_name = kernel_string($old_name->name) old_filelen = $old_name->len + old_name = kernel_string_n($old_name->name, old_filelen) new_fh = __getfh_inode($new_dir) - new_name = kernel_string($new_name->name) new_filelen = $new_name->len + new_name = kernel_string_n($new_name->name, new_filelen) name = "nfs.proc2.rename" argstr = sprintf("%s,%s",old_name,new_name) @@ -1555,11 +1555,11 @@ probe nfs.proc3.rename = kernel.function("nfs3_proc_rename")?, version =3 old_fh = __getfh_inode($old_dir) - old_name = kernel_string($old_name->name) old_filelen = $old_name->len + old_name = kernel_string_n($old_name->name, old_filelen) new_fh = __getfh_inode($new_dir) - new_name = kernel_string($new_name->name) new_filelen = $new_name->len + new_name = kernel_string_n($new_name->name, new_filelen) name = "nfs.proc3.rename" argstr = sprintf("%s,%s",old_name,new_name) @@ -1581,11 +1581,11 @@ probe nfs.proc4.rename = kernel.function("nfs4_proc_rename")?, version =4 old_fh = __getfh_inode($old_dir) - old_name = kernel_string($old_name->name) old_filelen = $old_name->len + old_name = kernel_string_n($old_name->name, old_filelen) new_fh = __getfh_inode($new_dir) - new_name = kernel_string($new_name->name) new_filelen = $new_name->len + new_name = kernel_string_n($new_name->name, new_filelen) name = "nfs.proc4.rename" argstr = sprintf("%s,%s",old_name,new_name) diff --git a/tapset/nfsd.stp b/tapset/nfsd.stp index de00cd3f..92a85cf1 100644 --- a/tapset/nfsd.stp +++ b/tapset/nfsd.stp @@ -209,8 +209,8 @@ probe nfsd.proc2.lookup = kernel.function("nfsd_proc_lookup") ?, version = 2 fh = __get_fh($argp,1) - filename = kernel_string($argp->name) filelen = $argp->len + filename = kernel_string_n($argp->name, filelen) name = "nfsd.proc2.lookup" argstr = sprintf("%s",filename) @@ -233,8 +233,8 @@ probe nfsd.proc3.lookup = kernel.function("nfsd3_proc_lookup") ?, version = 3 fh = __get_fh($argp,1) - filename = kernel_string($argp->name) filelen = $argp->len + filename = kernel_string_n($argp->name, filelen) name = "nfsd.proc3.lookup" argstr = sprintf("%s",filename) @@ -511,8 +511,8 @@ probe nfsd.proc2.create = kernel.function("nfsd_proc_create")?, version = 2 fh = __get_fh($argp,8) - filename = kernel_string($argp->name) filelen = $argp->len + filename = kernel_string_n($argp->name, filelen) name = "nfsd.proc2.create" argstr = sprintf("%s",filename) @@ -534,8 +534,8 @@ probe nfsd.proc3.create = kernel.function("nfsd3_proc_create")?, version = 3 fh = __get_fh($argp,9) - filename = kernel_string($argp->name) filelen = $argp->len + filename = kernel_string_n($argp->name, filelen) name = "nfsd.proc3.create" argstr = sprintf("%s",filename) @@ -576,8 +576,8 @@ probe nfsd.proc2.remove = kernel.function("nfsd_proc_remove")?, version = 2 fh = __get_fh($argp,10) - filename = kernel_string($argp->name) filelen = $argp->len + filename = kernel_string_n($argp->name, filelen) name = "nfsd.proc2.remove" argstr = sprintf("%s",filename) @@ -599,8 +599,8 @@ probe nfsd.proc3.remove = kernel.function("nfsd3_proc_remove")?, version = 3 fh = __get_fh($argp,11) - filename = kernel_string($argp->name) filelen = $argp->len + filename = kernel_string_n($argp->name, filelen) name = "nfsd.proc3.remove" argstr = sprintf("%s",filename) @@ -643,10 +643,10 @@ probe nfsd.proc2.rename = kernel.function("nfsd_proc_rename")?, fh = __get_fh($argp,12) tfh = __get_fh($argp,13) - filename = kernel_string($argp->fname) filelen = $argp->flen - tname = kernel_string($argp->tname) + filename = kernel_string_n($argp->fname, filelen) tlen = $argp->tlen + tname = kernel_string_n($argp->tname, tlen) name = "nfsd.proc2.rename" argstr = sprintf("%s,%s",filename,tname) @@ -669,10 +669,10 @@ probe nfsd.proc3.rename = kernel.function("nfsd3_proc_rename")?, fh = __get_fh($argp,14) tfh = __get_fh($argp,15) - filename = kernel_string($argp->fname) filelen = $argp->flen - tname = kernel_string($argp->tname) + filename = kernel_string_n($argp->fname, filelen) tlen = $argp->tlen + tname = kernel_string_n($argp->tname, tlen) name = "nfsd.proc3.rename" argstr = sprintf("%s,%s",filename,tname) @@ -915,8 +915,8 @@ probe nfsd.lookup = kernel.function("nfsd_lookup")?, { fh = __svc_fh($fhp) - filename = kernel_string($name) filelen = $len + filename = kernel_string_n($name, filelen) name = "nfsd.lookup" argstr = sprintf("%s",filename) @@ -947,8 +947,8 @@ probe nfsd.create = kernel.function("nfsd_create")?, { fh = __svc_fh($fhp) - filename = kernel_string($fname) filelen = $flen + filename = kernel_string_n($fname, filelen) type = $type iap_valid = $iap->ia_valid iap_mode = $iap->ia_mode @@ -987,8 +987,8 @@ probe nfsd.createv3 = kernel.function("nfsd_create_v3")?, { fh = __svc_fh($fhp) - filename = kernel_string($fname) filelen = $flen + filename = kernel_string_n($fname, filelen) iap_valid = $iap->ia_valid iap_mode = $iap->ia_mode truncp = $truncp @@ -1022,8 +1022,8 @@ probe nfsd.unlink = kernel.function("nfsd_unlink")?, { fh = __svc_fh($fhp) - filename = kernel_string($fname) filelen = $flen + filename = kernel_string_n($fname, filelen) type = $type name = "nfsd.unlink" @@ -1056,10 +1056,10 @@ probe nfsd.rename = kernel.function("nfsd_rename")?, fh = __svc_fh($ffhp) tfh = __svc_fh($tfhp) - filename = kernel_string($fname) filelen = $flen - tname = kernel_string($tname) + filename = kernel_string_n($fname, filelen) tlen = $tlen + tname = kernel_string_n($tname, tlen) name = "nfsd.rename" argstr = sprintf("%s,%s",filename,tname) |