diff options
author | kib <kib@FreeBSD.org> | 2009-10-29 14:34:24 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2009-10-29 14:34:24 +0000 |
commit | a617f964fc382eab76c4898c5ddaf96b976bc1af (patch) | |
tree | 491027a3f5d2fac20a6123c8bc612a7633da56a4 /sys/kern/kern_sig.c | |
parent | 68bae1c5ee082ef2cc431bf4642b7345a670004e (diff) | |
download | FreeBSD-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.c | 3 |
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)) { /* |