git://git.onelab.eu
/
procprotect.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c6f6343
)
Tests for tonights nightly builds
author
Sapan Bhatia
<gwsapan@gmail.com>
Fri, 19 Apr 2013 20:02:00 +0000
(16:02 -0400)
committer
Sapan Bhatia
<gwsapan@gmail.com>
Fri, 19 Apr 2013 20:02:00 +0000
(16:02 -0400)
procprotect.c
patch
|
blob
|
history
diff --git
a/procprotect.c
b/procprotect.c
index
950be09
..
cc5c117
100644
(file)
--- 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 */
/* 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;
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;
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) {
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;
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;
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;
}
if (!run_acl(inode->i_ino)) {
regs->ax = -EPERM;
}