• Eric W. Biederman's avatar
    coredump: Don't perform any cleanups before dumping core · 92307383
    Eric W. Biederman authored
    Rename coredump_exit_mm to coredump_task_exit and call it from do_exit
    before PTRACE_EVENT_EXIT, and before any cleanup work for a task
    happens.  This ensures that an accurate copy of the process can be
    captured in the coredump as no cleanup for the process happens before
    the coredump completes.  This also ensures that PTRACE_EVENT_EXIT
    will not be visited by any thread until the coredump is complete.
    
    Add a new flag PF_POSTCOREDUMP so that tasks that have passed through
    coredump_task_exit can be recognized and ignored in zap_process.
    
    Now that all of the coredumping happens before exit_mm remove code to
    test for a coredump in progress from mm_release.
    
    Replace "may_ptrace_stop()" with a simple test of "current->ptrace".
    The other tests in may_ptrace_stop all concern avoiding stopping
    during a coredump.  These tests are no longer necessary as it is now
    guaranteed that fatal_signal_pending will be set if the code enters
    ptrace_stop during a coredump.  The code in ptrace_stop is guaranteed
    not to stop if fatal_signal_pending returns true.
    
    Until this change "ptrace_event(PTRACE_EVENT_EXIT)" could call
    ptrace_stop without fatal_signal_pending being true, as signals are
    dequeued in get_signal before calling do_exit.  This is no longer
    an issue as "ptrace_event(PTRACE_EVENT_EXIT)" is no longer reached
    until after the coredump completes.
    
    Link: https://lkml.kernel.org/r/874kaax26c.fsf@disp2133Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    92307383
oom_kill.c 31.5 KB