 +	.ptrace_access_check	= rlsd_ptrace_access_check,
 +	.ptrace_traceme		= rlsd_ptrace_traceme,
 +
-+	.sb_umount		= rlsd_sb_umount
++	.sb_umount		= rlsd_sb_umount,
++
++	.task_prctl		= rlsd_task_prctl
 +};
 +
 +static __init int rlsd_init(void)

+rlsd-y := rlsd_lsm.o
diff -rupN linux-3.14.19-orig/security/rlsd/rlsd_lsm.c linux-3.14.19/security/rlsd/rlsd_lsm.c
--- linux-3.14.19-orig/security/rlsd/rlsd_lsm.c	1970-01-01 02:00:00.000000000 +0200
+++ linux-3.14.19/security/rlsd/rlsd_lsm.c	2014-09-25 22:26:44.223829260 +0300
@@ -0,0 +1,100 @@
+/*
+ * RLSD Linux Security Module
+ *

+
+__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)
