DF-0037 / fix.diff
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); |