summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2011-01-07 15:28:08 -0500
committerSteve Dickson <steved@redhat.com>2011-01-07 15:28:08 -0500
commitd13bc40cb3ee1904866e4e0c660162706e5f4d2b (patch)
tree4526beadc4d369014df008a05fcfcb1b4e353d59
parent3d039e6f9ad896fe43438aa3d1d0d37e06712833 (diff)
downloadsystemtap-d13bc40cb3ee1904866e4e0c660162706e5f4d2b.tar.gz
systemtap-d13bc40cb3ee1904866e4e0c660162706e5f4d2b.tar.xz
systemtap-d13bc40cb3ee1904866e4e0c660162706e5f4d2b.zip
Add code for debugging nfs_access with secure mounts
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--gss/gss_match.stp33
-rw-r--r--tapset/rpc_cred.stp14
2 files changed, 47 insertions, 0 deletions
diff --git a/gss/gss_match.stp b/gss/gss_match.stp
index 3d1f14e..1ca3454 100644
--- a/gss/gss_match.stp
+++ b/gss/gss_match.stp
@@ -1,8 +1,41 @@
+global mask
+
+probe module("nfs").function("nfs_do_access") {
+ mask = $mask
+}
+probe module("nfs").function("nfs_do_access").return {
+ printf("nfs_do_access(%s): mask %s return %d \n", execname(), file_modes(mask), $return);
+}
+probe module("nfs").function("nfs4_proc_access").return {
+ printf("nfs4_proc_access(%s): return %d \n", execname(), $return);
+}
probe module("auth_rpcgss").function("gss_match") {
printf("gss_match(%s): uid %d \n", execname(), $acred->uid);
}
probe module("auth_rpcgss").function("gss_match").return {
printf("gss_match(%s): return %d \n", execname(), $return);
}
+probe module("auth_rpcgss").function("gss_lookup_cred").return {
+ printf("gss_lookup_cred(%s): %s \n", execname(), rpc_cred_uid($return));
+ //print_stack(backtrace());
+}
+probe module("auth_rpcgss").function("gss_refresh").return {
+ printf("gss_lookup_cred(%s): %d \n", execname(), $return);
+}
+probe module("sunrpc").function("rpcauth_lookup_credcache").return {
+ printf("rpcauth_lookup_credcache(%s): %s \n", execname(), rpc_cred_uid($return));
+}
+probe module("sunrpc").function("rpcauth_lookupcred").return {
+ printf("rpcauth_lookupcred(%s): %s \n", execname(), rpc_cred_uid($return));
+}
+probe module("sunrpc").function("rpc_lookup_machine_cred").return {
+ printf("rpc_lookup_machine_cred(%s): %s \n", execname(), rpc_cred_uid($return));
+}
+probe module("sunrpc").function("rpcauth_bind_root_cred") {
+ printf("rpcauth_bind_root_cred(%s): %p \n", execname(), $task);
+}
+probe module("sunrpc").function("rpcauth_generic_bind_cred") {
+ printf("rpcauth_generic_bind_cred(%s): %p \n", execname(), $task);
+}
probe begin { log("starting gss probe") }
probe end { log("ending gss probe") }
diff --git a/tapset/rpc_cred.stp b/tapset/rpc_cred.stp
new file mode 100644
index 0000000..441a0bf
--- /dev/null
+++ b/tapset/rpc_cred.stp
@@ -0,0 +1,14 @@
+%{
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/sunrpc/clnt.h>
+%}
+
+function rpc_cred_uid:string(_cred:long)
+%{
+ struct rpc_cred *cred = (struct rpc_cred *)(long) kread(&(THIS->_cred));
+
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "uid=%d", cred->cr_uid);
+
+ CATCH_DEREF_FAULT();
+%}