DragonFlyBSD Kernel Audit
DF-0037 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c
--- a/sys/kern/kern_prot.c
+++ b/sys/kern/kern_prot.c
@@ -122,7 +122,12 @@
 	}
 	if (error == 0) {
 		lwkt_gettoken_shared(&pt->p_token);
-		sysmsg->sysmsg_result = pt->p_pgrp->pg_id;
+		if (pt->p_session != p->p_session &&
+		    caps_priv_check(p->p_ucred, SYSCAP_NOPROC_TRESPASS)) {
+			error = EPERM;
+		} else {
+			sysmsg->sysmsg_result = pt->p_pgrp->pg_id;
+		}
 		lwkt_reltoken(&pt->p_token);
 	}
 	if (pt)
@@ -150,8 +155,14 @@
 		if (pt == NULL)
 			error = ESRCH;
 	}
-	if (error == 0)
-		sysmsg->sysmsg_result = pt->p_session->s_sid;
+	if (error == 0) {
+		if (pt->p_session != p->p_session &&
+		    caps_priv_check(p->p_ucred, SYSCAP_NOPROC_TRESPASS)) {
+			error = EPERM;
+		} else {
+			sysmsg->sysmsg_result = pt->p_session->s_sid;
+		}
+	}
 	if (pt)
 		PRELE(pt);
 	return (error);