summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2009-10-29 14:34:24 +0000
committerkib <kib@FreeBSD.org>2009-10-29 14:34:24 +0000
commita617f964fc382eab76c4898c5ddaf96b976bc1af (patch)
tree491027a3f5d2fac20a6123c8bc612a7633da56a4 /sys/kern/kern_sig.c
parent68bae1c5ee082ef2cc431bf4642b7345a670004e (diff)
downloadFreeBSD-src-a617f964fc382eab76c4898c5ddaf96b976bc1af.zip
FreeBSD-src-a617f964fc382eab76c4898c5ddaf96b976bc1af.tar.gz
Trapsignal() calls kern_sigprocmask() when delivering catched signal
with proc lock held. Reported and tested by: Mykola Dzham freebsd at levsha org ua MFC after: 1 month
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index d0249f5..7f5cfa3 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1863,7 +1863,8 @@ trapsignal(struct thread *td, ksiginfo_t *ksi)
if (!SIGISMEMBER(ps->ps_signodefer, sig)) {
SIGEMPTYSET(mask);
SIGADDSET(mask, sig);
- kern_sigprocmask(td, SIG_BLOCK, &mask, NULL, 0);
+ kern_sigprocmask(td, SIG_BLOCK, &mask, NULL,
+ SIGPROCMASK_PROC_LOCKED);
}
if (SIGISMEMBER(ps->ps_sigreset, sig)) {
/*
OpenPOWER on IntegriCloud