提交 c33880aa 编写于 作者: K Kirill Korotaev 提交者: Linus Torvalds

[PATCH] sigkill priority fix

If SIGKILL does not have priority, we cannot instantly kill task before it
makes some unexpected job.  It can be critical, but we were unable to
reproduce this easily until Heiko Carstens <Heiko.Carstens@de.ibm.com>
reported this problem on LKML.
Signed-Off-By: NKirill Korotaev <dev@sw.ru>
Signed-Off-By: NAlexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 6431e6a2
......@@ -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)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册