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
Merge branch 'master' of ssh://git.planet-lab.org/git/procprotect
[procprotect.git]
/
procprotect.c
diff --git
a/procprotect.c
b/procprotect.c
index
4431ff8
..
2e8cd13
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);
@@
-113,9
+119,7
@@
static int lookup_fast_ret(struct kretprobe_instance *ri, struct pt_regs *regs)
/* The kernel is going to honor the request. Here's where we step in */
struct inode *inode = *(ctx->inode);
if (!run_acl(inode->i_ino)) {
/* The kernel is going to honor the request. Here's where we step in */
struct inode *inode = *(ctx->inode);
if (!run_acl(inode->i_ino)) {
- if (current->nsproxy->mnt_ns!=init_task.nsproxy->mnt_ns) {
- regs->ax = -EPERM;
- }
+ regs->ax = -EPERM;
}
}
}
}
@@
-158,12
+162,14
@@
static int lookup_slow_ret(struct kretprobe_instance *ri, struct pt_regs *regs)
if (ret==0) {
/* The kernel is going to honor the request. Here's where we step in */
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 inode *inode = p->dentry->d_inode;
if (!run_acl(inode->i_ino)) {
struct path *p = ctx->path;
struct inode *inode = p->dentry->d_inode;
if (!run_acl(inode->i_ino)) {
- if (current->nsproxy->mnt_ns!=init_task.nsproxy->mnt_ns) {
- regs->ax = -EPERM;
- }
+ regs->ax = -EPERM;
}
}
}
}
@@
-177,12
+183,17
@@
struct open_flags {
int intent;
};
int intent;
};
-static struct file *do_last_probe(struct nameidata *nd, struct path *path,
+static struct file *do_last_probe(struct nameidata *nd, struct path *path,
struct file *file,
struct open_flags *op, const char *pathname) {
struct dentry *parent = nd->path.dentry;
struct inode *pinode = parent->d_inode;
struct open_flags *op, const char *pathname) {
struct dentry *parent = nd->path.dentry;
struct inode *pinode = parent->d_inode;
+ struct qstr *q = &nd->last;
+
if (pinode->i_sb->s_magic == PROC_SUPER_MAGIC && current->nsproxy->mnt_ns!=init_task.nsproxy->mnt_ns) {
if (pinode->i_sb->s_magic == PROC_SUPER_MAGIC && current->nsproxy->mnt_ns!=init_task.nsproxy->mnt_ns) {
+ /*if (!strncmp(q->name,"sysrq-trigger",13)) {
+ printk(KERN_CRIT "do_last sysrqtrigger: %d",op->open_flag);
+ }*/
op->open_flag &= ~O_CREAT;
}
jprobe_return();
op->open_flag &= ~O_CREAT;
}
jprobe_return();
@@
-278,11
+289,12
@@
int procfile_write(struct file *file, const char *buffer, unsigned long count, v
static int __init procprotect_init(void)
{
static int __init procprotect_init(void)
{
- printk("Procprotect: starting procprotect version %s with ACLs at path %s.\n",
- VERSION_STR, aclpath);
int ret;
int i;
int ret;
int i;
+ printk("Procprotect: starting procprotect version %s with ACLs at path %s.\n",
+ VERSION_STR, aclpath);
+
for(i=0;i<HASH_SIZE;i++) {
INIT_HLIST_HEAD(&procprotect_hash[i]);
}
for(i=0;i<HASH_SIZE;i++) {
INIT_HLIST_HEAD(&procprotect_hash[i]);
}