X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=procprotect.c;h=4763e1713e4c1fbd2f8a18a0e162652ac1fd9313;hb=e86258a533beb4e2d7e7d0372a1048e88b611a06;hp=2e8cd13c75ab91a90d117e8d0ca4bd33a9121693;hpb=eaf5395b381609239888c9b59e81bcd54bbe5630;p=procprotect.git diff --git a/procprotect.c b/procprotect.c index 2e8cd13..4763e17 100644 --- a/procprotect.c +++ b/procprotect.c @@ -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;