• Eric W. Biederman's avatar
    signal: Remove the bogus sigkill_pending in ptrace_stop · 7d613f9f
    Eric W. Biederman authored
    The existence of sigkill_pending is a little silly as it is
    functionally a duplicate of fatal_signal_pending that is used in
    exactly one place.
    
    Checking for pending fatal signals and returning early in ptrace_stop
    is actively harmful.  It casues the ptrace_stop called by
    ptrace_signal to return early before setting current->exit_code.
    Later when ptrace_signal reads the signal number from
    current->exit_code is undefined, making it unpredictable what will
    happen.
    
    Instead rely on the fact that schedule will not sleep if there is a
    pending signal that can awaken a task.
    
    Removing the explict sigkill_pending test fixes fixes ptrace_signal
    when ptrace_stop does not stop because current->exit_code is always
    set to to signr.
    
    Cc: stable@vger.kernel.org
    Fixes: 3d749b9e ("ptrace: simplify ptrace_stop()->sigkill_pending() path")
    Fixes: 1a669c2f ("Add arch_ptrace_stop")
    Link: https://lkml.kernel.org/r/87pmsyx29t.fsf@disp2133
    
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    7d613f9f
signal.c 122 KB