• Eric W. Biederman's avatar
    ptrace: Reimplement PTRACE_KILL by always sending SIGKILL · 6a2d90ba
    Eric W. Biederman authored
    The current implementation of PTRACE_KILL is buggy and has been for
    many years as it assumes it's target has stopped in ptrace_stop.  At a
    quick skim it looks like this assumption has existed since ptrace
    support was added in linux v1.0.
    
    While PTRACE_KILL has been deprecated we can not remove it as
    a quick search with google code search reveals many existing
    programs calling it.
    
    When the ptracee is not stopped at ptrace_stop some fields would be
    set that are ignored except in ptrace_stop.  Making the userspace
    visible behavior of PTRACE_KILL a noop in those case.
    
    As the usual rules are not obeyed it is not clear what the
    consequences are of calling PTRACE_KILL on a running process.
    Presumably userspace does not do this as it achieves nothing.
    
    Replace the implementation of PTRACE_KILL with a simple
    send_sig_info(SIGKILL) followed by a return 0.  This changes the
    observable user space behavior only in that PTRACE_KILL on a process
    not stopped in ptrace_stop will also kill it.  As that has always
    been the intent of the code this seems like a reasonable change.
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Suggested-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Reviewed-by: default avatarOleg Nesterov <oleg@redhat.com>
    Link: https://lkml.kernel.org/r/20220505182645.497868-7-ebiederm@xmission.comSigned-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    6a2d90ba
step.c 6.25 KB