-static struct kretprobe proc_probe = {
- .entry_handler = (kprobe_opcode_t *) do_lookup_entry,
- .handler = (kprobe_opcode_t *) do_lookup_ret,
- .maxactive = 20,
- .data_size = sizeof(struct procprotect_ctx)
+struct open_flags {
+ int open_flag;
+ umode_t mode;
+ int acc_mode;
+ int intent;
+};
+
+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 qstr *q = &nd->last;
+
+
+ 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();
+}
+
+static struct jprobe dolast_probe = {
+ .entry = (kprobe_opcode_t *) do_last_probe
+};
+
+static struct kretprobe fast_probe = {
+ .entry_handler = (kprobe_opcode_t *) lookup_fast_entry,
+ .handler = (kprobe_opcode_t *) lookup_fast_ret,
+ .maxactive = 20,
+ .data_size = sizeof(struct procprotect_ctx)
+};
+
+static struct kretprobe slow_probe = {
+ .entry_handler = (kprobe_opcode_t *) lookup_slow_entry,
+ .handler = (kprobe_opcode_t *) lookup_slow_ret,
+ .maxactive = 20,
+ .data_size = sizeof(struct procprotect_ctx)