diff -ur orig/linux-2.6.8.1/kernel/signal.c linux-2.6.8.1/kernel/signal.c --- orig/linux-2.6.8.1/kernel/signal.c 2005-05-12 02:44:12.000000000 +0400 +++ linux-2.6.8.1/kernel/signal.c 2005-05-13 12:07:04.000000000 +0400 @@ -519,7 +520,16 @@ { 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)) {