diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2005-05-25 14:58:04 -0700 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-05-25 14:58:04 -0700 |
commit | 4b463f785837f73bdd88ae3821bb7b69599010c9 (patch) | |
tree | 80dc0a7e3e33596ff3ece410d9ff9e6b63e45b87 /kernel/signal.c | |
parent | 6df16d0c35b9c0d3627f30c106e6142d3d12662b (diff) | |
parent | 384f1fcd2db8bc5a15f20f10793d8e1c82acd6c5 (diff) |
Merge of /home/davem/src/GIT/linux-2.6/.git/
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 8f3debc77c5..b3c24c732c5 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -522,7 +522,16 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask, { int sig = 0; - sig = next_signal(pending, mask); + /* SIGKILL must have priority, otherwise it is quite easy + * to create an unkillable process, sending sig < SIGKILL + * to self */ + if (unlikely(sigismember(&pending->signal, SIGKILL))) { + if (!sigismember(mask, SIGKILL)) + sig = SIGKILL; + } + + if (likely(!sig)) + sig = next_signal(pending, mask); if (sig) { if (current->notifier) { if (sigismember(current->notifier_mask, sig)) { |