summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzhaolei <zhaolei>2007-10-15 05:24:01 +0000
committerzhaolei <zhaolei>2007-10-15 05:24:01 +0000
commit487ab975166234c1543e8ac09b36853053ad6675 (patch)
tree14eeaa1fedf37b260564f0f23cacad4feee1579e
parent1969b5bca1098bb03f8bcffc5cc940102a67744c (diff)
downloadsystemtap-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--ChangeLog11
-rw-r--r--stapfuncs.5.in6
-rw-r--r--tapset/ChangeLog11
-rw-r--r--tapset/conversions.stp13
-rw-r--r--tapset/nfs_proc.stp36
-rw-r--r--tapset/nfsd.stp32
6 files changed, 75 insertions, 34 deletions
diff --git a/ChangeLog b/ChangeLog
index ff71d731..de2f5990 100644
--- a/ChangeLog
+++ b/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 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)