mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
[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: Kirill Korotaev <dev@sw.ru> Signed-Off-By: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
6431e6a28e
commit
c33880aadd
@ -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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user