git://git.onelab.eu
/
procprotect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Setting tag procprotect-0.3-3
[procprotect.git]
/
procprotect.c
diff --git
a/procprotect.c
b/procprotect.c
index
88e88be
..
4763e17
100644
(file)
--- a/
procprotect.c
+++ b/
procprotect.c
@@
-2,6
+2,7
@@
#include <linux/moduleparam.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/moduleparam.h>
#include <linux/types.h>
#include <linux/kernel.h>
+#include <linux/version.h>
#include <linux/fs_struct.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/fs_struct.h>
#include <linux/fs.h>
#include <linux/mm.h>
@@
-33,7
+34,12
@@
#error "This code does not support your architecture"
#endif
#error "This code does not support your architecture"
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
+static char *aclpath = "procprotect";
+#else
static char *aclpath __devinitdata = "procprotect";
static char *aclpath __devinitdata = "procprotect";
+#endif
+
static struct qstr aclqpath;
module_param(aclpath, charp, 0);
static struct qstr aclqpath;
module_param(aclpath, charp, 0);
@@
-149,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 */
/* 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)
{
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) {
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 || !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;
struct inode *inode = p->dentry->d_inode;
if (!run_acl(inode->i_ino)) {
regs->ax = -EPERM;