Fixed all bugs in procprotect induced by updated to kernel 3.6.2. Verified to work...
authorSapan Bhatia <gwsapan@gmail.com>
Wed, 12 Dec 2012 21:39:38 +0000 (16:39 -0500)
committerSapan Bhatia <gwsapan@gmail.com>
Wed, 12 Dec 2012 21:39:38 +0000 (16:39 -0500)
procprotect.c
procprotect.spec

index 4431ff8..0c8f251 100644 (file)
@@ -113,9 +113,7 @@ static int lookup_fast_ret(struct kretprobe_instance *ri, struct pt_regs *regs)
         /* The kernel is going to honor the request. Here's where we step in */
         struct inode *inode = *(ctx->inode);
         if (!run_acl(inode->i_ino)) {
-            if (current->nsproxy->mnt_ns!=init_task.nsproxy->mnt_ns) {
-                regs->ax = -EPERM;
-            }
+            regs->ax = -EPERM;
         }
     }
 
@@ -158,12 +156,14 @@ static int lookup_slow_ret(struct kretprobe_instance *ri, struct pt_regs *regs)
 
     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;
         struct inode *inode = p->dentry->d_inode;
         if (!run_acl(inode->i_ino)) {
-            if (current->nsproxy->mnt_ns!=init_task.nsproxy->mnt_ns) {
-                regs->ax = -EPERM;
-            }
+            regs->ax = -EPERM;
         }
     }
 
@@ -177,12 +177,17 @@ struct open_flags {
   int intent;
 };
 
-static struct file *do_last_probe(struct nameidata *nd, struct path *path,
+static struct file *do_last_probe(struct nameidata *nd, struct path *path, struct file *file,
                          struct open_flags *op, const char *pathname) {
     struct dentry *parent = nd->path.dentry;
     struct inode *pinode = parent->d_inode;
+    struct qstr *q = &nd->last;
 
+    
     if (pinode->i_sb->s_magic == PROC_SUPER_MAGIC && current->nsproxy->mnt_ns!=init_task.nsproxy->mnt_ns) {
+        /*if (!strncmp(q->name,"sysrq-trigger",13)) {
+            printk(KERN_CRIT "do_last sysrqtrigger: %d",op->open_flag);
+        }*/
         op->open_flag &= ~O_CREAT;
     }
     jprobe_return();
index ac546b4..ab08480 100644 (file)
@@ -1,5 +1,5 @@
 %define name procprotect
-%define version 0.1
+%define version 0.3
 %define taglevel 3
 
 ### legacy from locally-built kernels, used to define these