From c40c7bb97725cfe49729055d5d40901c0d2cda96 Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Fri, 19 Apr 2013 16:02:00 -0400 Subject: [PATCH] Tests for tonights nightly builds --- procprotect.c | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) 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; } -- 2.43.0