From 738d7a684187ffa9fad16e8cc46e441aca3a903b Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Wed, 12 Dec 2012 16:39:38 -0500 Subject: [PATCH] Fixed all bugs in procprotect induced by updated to kernel 3.6.2. Verified to work on kernel 3.6.7 --- procprotect.c | 19 ++++++++++++------- procprotect.spec | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/procprotect.c b/procprotect.c index 4431ff8..0c8f251 100644 --- a/procprotect.c +++ b/procprotect.c @@ -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(); diff --git a/procprotect.spec b/procprotect.spec index ac546b4..ab08480 100644 --- a/procprotect.spec +++ b/procprotect.spec @@ -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 -- 2.43.0