diff options
-rw-r--r-- | sys/kern/kern_sig.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 099a7d0..0e4c5b5 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -1553,10 +1553,11 @@ sigtd(struct proc *p, int sig, int prop) /* * If we know the signal is bound for a specific thread then we * assume that we are in that threads context. This is the case - * for SIGXCPU, SIGILL, etc. Otherwise someone did a kill() from - * userland and the real thread doesn't actually matter. + * for SIGXCPU, SIGILL, etc. Otherwise someone did a kill() from + * userland, if current thread can handle the signal, it should + * get the signal. */ - if ((prop & SA_PROC) != 0 && curthread->td_proc == p) + if (curthread->td_proc == p && !SIGISMEMBER(curthread->td_sigmask, sig)) return (curthread); /* |