diff options
author | Steve French <sfrench@hera.kernel.org> | 2005-05-31 14:32:44 -0700 |
---|---|---|
committer | Steve French <sfrench@hera.kernel.org> | 2005-05-31 14:32:44 -0700 |
commit | af6f5e3247a68074e384ef93c0b4bce1b73c9d80 (patch) | |
tree | 87b0f1e48bd0ca67a78fab0fa42b37864863fdfd /kernel/signal.c | |
parent | 7e2987503dda95a5f80290bb8c06279009c2419e (diff) | |
parent | 2e3e80c2b75e3815a0160cbd23d4fdb767d66b35 (diff) | |
download | kernel-crypto-af6f5e3247a68074e384ef93c0b4bce1b73c9d80.tar.gz kernel-crypto-af6f5e3247a68074e384ef93c0b4bce1b73c9d80.tar.xz kernel-crypto-af6f5e3247a68074e384ef93c0b4bce1b73c9d80.zip |
Merge with rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/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)) { |