• Eric W. Biederman's avatar
    signal: Drop signals received after a fatal signal has been processed · 9a95f78e
    Eric W. Biederman authored
    In 403bad72 ("coredump: only SIGKILL should interrupt the
    coredumping task") Oleg modified the kernel to drop all signals that
    come in during a coredump except SIGKILL, and suggested that it might
    be a good idea to generalize that to other cases after the process has
    received a fatal signal.
    
    Semantically it does not make sense to perform any signal delivery
    after the process has already been killed.
    
    When a signal is sent while a process is dying today the signal is
    placed in the signal queue by __send_signal and a single task of the
    process is woken up with signal_wake_up, if there are any tasks that
    have not set PF_EXITING.
    
    Take things one step farther and have prepare_signal report that all
    signals that come after a process has been killed should be ignored.
    While retaining the historical exception of allowing SIGKILL to
    interrupt coredumps.
    
    Update the comment in fs/coredump.c to make it clear coredumps are
    special in being able to receive SIGKILL.
    
    This changes things so that a process stopped in PTRACE_EVENT_EXIT can
    not be made to escape it's ptracer and finish exiting by sending it
    SIGKILL.  That a process can be made to leave PTRACE_EVENT_EXIT and
    escape it's tracer by sending the process a SIGKILL has been
    complicating tracer's for no apparent advantage.  If the process needs
    to be made to leave PTRACE_EVENT_EXIT all that needs to happen is to
    kill the proceses's tracer.  This differs from the coredump code where
    there is no other mechanism besides honoring SIGKILL to expedite the
    end of coredumping.
    
    Link: https://lkml.kernel.org/r/875yksd4s9.fsf_-_@email.froward.int.ebiederm.org
    
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    9a95f78e
coredump.c 28.8 KB