+ fast_probe.kp.addr =
+ (kprobe_opcode_t *) kallsyms_lookup_name("lookup_fast");
+
+ if (!fast_probe.kp.addr) {
+ printk("Couldn't find %s to plant kretprobe\n", "lookup_fast");
+ return -1;
+ }
+
+ slow_probe.kp.addr =
+ (kprobe_opcode_t *) kallsyms_lookup_name("lookup_slow");
+
+ if (!slow_probe.kp.addr) {
+ printk("Couldn't find %s to plant kretprobe\n", "lookup_slow");
+ return -1;
+ }
+
+ if ((ret = register_kretprobe(&fast_probe)) <0) {
+ printk("register_kretprobe failed, returned %d\n", ret);
+ return -1;
+ }
+
+ printk("Planted kretprobe at %p, handler addr %p\n",
+ fast_probe.kp.addr, fast_probe.handler);
+
+ if ((ret = register_kretprobe(&slow_probe)) <0) {
+ printk("register_kretprobe failed, returned %d\n", ret);
+ return -1;
+ }
+ printk("Planted kretprobe at %p, handler addr %p\n",
+ slow_probe.kp.addr, slow_probe.handler);
+ return 0;
+}
+
+static void add_entry(char *pathname) {
+ struct path path;
+ if (kern_path(pathname, 0, &path)) {
+ printk(KERN_CRIT "Path lookup failed for %s",pathname);
+ }
+ else {
+ unsigned int ino = path.dentry->d_inode->i_ino;
+ struct acl_entry *entry;
+ entry = kmalloc(GFP_KERNEL, sizeof(struct acl_entry));
+ entry->ino = ino;
+
+ if (!entry) {
+ printk(KERN_CRIT "Could not allocate memory for %s",pathname);
+ }
+ else {
+ if (run_acl(ino)) {
+ hlist_add_head_rcu(&entry->hlist,&procprotect_hash[ino&(HASH_SIZE-1)]);
+ printk(KERN_CRIT "Added inode %u",ino);
+ }
+ else {
+ printk(KERN_CRIT "Did not add inode %u, already in list", ino);
+ }
+ }
+ }
+