Tests for tonights nightly builds
Sapan Bhatia [Fri, 19 Apr 2013 20:02:00 +0000 (16:02 -0400)]
procprotect.c

index 950be09..cc5c117 100644 (file)
@@ -155,23 +155,47 @@ static int lookup_slow_entry(struct kretprobe_instance *ri, struct pt_regs *regs
 /* The entry hook ensures that the return hook is only called for
    accesses to /proc */
 
+static int print_once = 0;
+
 static int lookup_slow_ret(struct kretprobe_instance *ri, struct pt_regs *regs)
 {
     struct procprotect_ctx *ctx;
     int ret;
 
-    if (!ri) {/* Race condition?*/ return 0;}
+    if (!ri) {printk(KERN_CRIT "ri is 0x0");/* Race condition?*/ return 0;}
     ctx = (struct procprotect_ctx *) ri->data;
+
+    if (!regs) {
+        if (!print_once++) {
+            printk(KERN_CRIT "Regs is 0x0");
+        }
+        return 0;
+    }
+
     ret = regs->ax;
 
     if (ret==0) {
-        /* The kernel is going to honor the request. Here's where we step in */
-        /*struct qstr *q = ctx->q;
-        if (!strncmp(q->name,"sysrq-trigger",13)) {
-            printk(KERN_CRIT "lookup_slow sysrqtrigger");
-        }*/
         struct path *p = ctx->path;
+        if (!p) {
+            if (!print_once++) {
+                printk(KERN_CRIT "P is 0x0");
+            }
+            return 0;
+        }
+        if (!p->dentry) {
+            if (!print_once++) {
+                printk(KERN_CRIT "P->dentry is 0x0");
+            }
+            return 0;
+        }
+
         struct inode *inode = p->dentry->d_inode;
+        if (!inode) {
+            if (!print_once++) {
+                printk(KERN_CRIT "inode is 0x0");
+            }
+            return 0;
+        }
         if (!run_acl(inode->i_ino)) {
             regs->ax = -EPERM;
         }