diff options
author | rwatson <rwatson@FreeBSD.org> | 2002-01-10 01:25:35 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2002-01-10 01:25:35 +0000 |
commit | 9f1ff731e4a0e7a77a78d129ee22a25160c92e21 (patch) | |
tree | 9dd3e95da774dec0fa27a19c1a7a80fee03d56a4 /sys/kern/kern_sig.c | |
parent | 2fc9c4563aec4d68e1438f96a23fe9e3ce39a42b (diff) | |
download | FreeBSD-src-9f1ff731e4a0e7a77a78d129ee22a25160c92e21.zip FreeBSD-src-9f1ff731e4a0e7a77a78d129ee22a25160c92e21.tar.gz |
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>
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r-- | sys/kern/kern_sig.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index c1f5dac..49ce178 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -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); |