• Oleg Nesterov's avatar
    __group_complete_signal(): fix coredump with group stop race · 198466b4
    Oleg Nesterov authored
    When __group_complete_signal() sees sig_kernel_coredump() signal, it starts
    the group stop, but sets ->group_exit_task = t in a hope that "t" will
    actually dequeue this signal and invoke do_coredump().  However, by the
    time "t" enters get_signal_to_deliver() it is possible that the signal was
    blocked/ignored or we have another pending !SIG_KERNEL_COREDUMP_MASK signal
    which will be dequeued first.  This means the task could be stopped but not
    killed.
    
    Remove this code from __group_complete_signal().  Note also this patch
    removes the bogus signal_wake_up(t, 1).  This thread can't be
    STOPPED/TRACED, note the corresponding check in wants_signal().
    Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
    Cc: Davide Libenzi <davidel@xmailserver.org>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Robin Holt <holt@sgi.com>
    Cc: Roland McGrath <roland@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    198466b4
signal.c 64 KB