Setting tag procprotect-0.3-3
[procprotect.git] / procprotect.c
index 2e8cd13..4763e17 100644 (file)
@@ -155,18 +155,23 @@ 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 = (struct procprotect_ctx *) ri->data;
-    int ret = regs->ax;
+    struct procprotect_ctx *ctx;
+    int ret;
+
+    if (!ri || !ri->data) {return 0;}
+    ctx = (struct procprotect_ctx *) ri->data;
+
+    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 || !p->dentry || !p->dentry->d_inode /* This last check was responsible for the f18 bug*/) {
+            return 0;
+        }
         struct inode *inode = p->dentry->d_inode;
         if (!run_acl(inode->i_ino)) {
             regs->ax = -EPERM;