From: Sapan Bhatia Date: Fri, 19 Apr 2013 20:02:00 +0000 (-0400) Subject: Tests for tonights nightly builds X-Git-Tag: procprotect-0.3-2~2 X-Git-Url: http://git.onelab.eu/?p=procprotect.git;a=commitdiff_plain;h=c40c7bb97725cfe49729055d5d40901c0d2cda96 Tests for tonights nightly builds --- diff --git a/procprotect.c b/procprotect.c index 950be09..cc5c117 100644 --- a/procprotect.c +++ b/procprotect.c @@ -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; }