 +	    (0 == strcmp("sysfs", mnt->mnt_sb->s_type->name)) ||
 +	    (0 == strcmp("devtmpfs", mnt->mnt_sb->s_type->name)) ||
 +	    (0 == strcmp("devpts", mnt->mnt_sb->s_type->name))) {
-+		printk(KERN_ALERT "rlsd: denied unmount of %s\n",
-+		       mnt->mnt_sb->s_type->name);
++		tsk = current;
++		printk(KERN_ALERT "rlsd: denied unmount of %s from %lu (%s)\n",
++		       mnt->mnt_sb->s_type->name,
++		       (unsigned long) tsk->pid,
++		       get_task_comm(name, tsk));
 +		return -EPERM;
++	}
++
++	return 0;
++}
++
++static inline int rlsd_task_prctl(int option,
++                                  unsigned long arg2,
++                                  unsigned long arg3,
++                                  unsigned long arg4,
++                                  unsigned long arg5)
++{
++	char name[sizeof(((struct task_struct *) NULL)->comm)];
++	struct task_struct *tsk;
++
++	if (PR_SET_NAME == option) {
++		tsk = current;
++		printk(KERN_ALERT "rlsd: denied PR_SET_NAME from %lu (%s)\n",
++		       (unsigned long) tsk->pid,
++		       get_task_comm(name, tsk));
++		return -EINVAL;
 +	}
 +
 +	return 0;

+#include <linux/sched.h>
+#include <linux/mount.h>
+#include <linux/fs.h>
+#include <linux/printk.h>
+#include <linux/string.h>
+

+
+__setup("rlsd=", rlsd_enabled_setup);
+
+static int rlsd_ptrace_traceme(struct task_struct *parent)
+{
+	char name[sizeof(parent->comm)];
+	struct task_struct *child;
+
+	if (!parent)
+		return -EINVAL;
+
+	child = current;
+	printk(KERN_ALERT "rlsd: denied PTRACE_TRACEME from %lu (%s)\n",
+	       (unsigned long) child->pid,
+	       get_task_comm(name, child));
+	return -EPERM;
+}
+
+static int rlsd_ptrace_access_check(struct task_struct *child,
+                                    unsigned int mode)
+{
+	char pname[sizeof(child->comm)];
+	struct task_struct *parent;
+
+	if (!child)
+		return -EINVAL;
+
+	if (PTRACE_MODE_ATTACH != mode)
+		return cap_ptrace_access_check(child, mode);
+
+	/* access child->comm directly - ptrace_may_access() (kernel/ptrace.c)
+	 * already locks */
+	parent = current;
+	printk(KERN_ALERT "rlsd: denied attach of %lu (%s) to %lu (%s)\n",
+	       (unsigned long) parent->pid,
+	       get_task_comm(pname, parent),
+	       (unsigned long) child->pid,
+	       child->comm);
+	return -EPERM;
+}
+
+static int rlsd_sb_umount(struct vfsmount *mnt, int flags)
+{
+	char name[sizeof(((struct task_struct *) NULL)->comm)];
+	struct task_struct *tsk;
+
+	if (!mnt)
+		return -EINVAL;
+	if (!mnt->mnt_sb)
