o Revert kern_sig.c#1.143, as cr_cansignal() doesn't currently permit
a number of desirable cases in which SIGIO/SIGURG are delivered. We'll keep tweaking. Reported by: Alexander Kabaev <ak03@gte.com>
This commit is contained in:
parent
ced8202c20
commit
2b87b6d4f4
@ -97,6 +97,18 @@ SYSCTL_INT(_kern, KERN_LOGSIGEXIT, logsigexit, CTLFLAG_RW,
|
||||
&kern_logsigexit, 0,
|
||||
"Log processes quitting on abnormal signals to syslog(3)");
|
||||
|
||||
/*
|
||||
* Policy -- Can ucred cr1 send SIGIO to process cr2?
|
||||
* Should use cr_cansignal() once cr_cansignal() allows SIGIO and SIGURG
|
||||
* in the right situations.
|
||||
*/
|
||||
#define CANSIGIO(cr1, cr2) \
|
||||
((cr1)->cr_uid == 0 || \
|
||||
(cr1)->cr_ruid == (cr2)->cr_ruid || \
|
||||
(cr1)->cr_uid == (cr2)->cr_ruid || \
|
||||
(cr1)->cr_ruid == (cr2)->cr_uid || \
|
||||
(cr1)->cr_uid == (cr2)->cr_uid)
|
||||
|
||||
int sugid_coredump;
|
||||
SYSCTL_INT(_kern, OID_AUTO, sugid_coredump, CTLFLAG_RW,
|
||||
&sugid_coredump, 0, "Enable coredumping set user/group ID processes");
|
||||
@ -2064,8 +2076,7 @@ pgsigio(sigio, sig, checkctty)
|
||||
|
||||
if (sigio->sio_pgid > 0) {
|
||||
PROC_LOCK(sigio->sio_proc);
|
||||
if (cr_cansignal(sigio->sio_ucred, sigio->sio_proc, sig)
|
||||
== 0)
|
||||
if (CANSIGIO(sigio->sio_ucred, sigio->sio_proc->p_ucred))
|
||||
psignal(sigio->sio_proc, sig);
|
||||
PROC_UNLOCK(sigio->sio_proc);
|
||||
} else if (sigio->sio_pgid < 0) {
|
||||
@ -2073,7 +2084,7 @@ pgsigio(sigio, sig, checkctty)
|
||||
|
||||
LIST_FOREACH(p, &sigio->sio_pgrp->pg_members, p_pglist) {
|
||||
PROC_LOCK(p);
|
||||
if ((cr_cansignal(sigio->sio_ucred, p, sig) == 0) &&
|
||||
if (CANSIGIO(sigio->sio_ucred, p->p_ucred) &&
|
||||
(checkctty == 0 || (p->p_flag & P_CONTROLT)))
|
||||
psignal(p, sig);
|
||||
PROC_UNLOCK(p);
|
||||
|
Loading…
Reference in New Issue
Block a user