lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 043/879] ptrace/xtensa: Replace PT_SINGLESTEP with TIF_SINGLESTEP
    Date
    From: Eric W. Biederman <ebiederm@xmission.com>

    commit 4a3d2717d140401df7501a95e454180831a0c5af upstream.

    xtensa is the last user of the PT_SINGLESTEP flag. Changing tsk->ptrace in
    user_enable_single_step and user_disable_single_step without locking could
    potentiallly cause problems.

    So use a thread info flag instead of a flag in tsk->ptrace. Use TIF_SINGLESTEP
    that xtensa already had defined but unused.

    Remove the definitions of PT_SINGLESTEP and PT_BLOCKSTEP as they have no more users.

    Cc: stable@vger.kernel.org
    Acked-by: Max Filippov <jcmvbkbc@gmail.com>
    Tested-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Oleg Nesterov <oleg@redhat.com>
    Link: https://lkml.kernel.org/r/20220505182645.497868-4-ebiederm@xmission.com
    Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/xtensa/kernel/ptrace.c | 4 ++--
    arch/xtensa/kernel/signal.c | 4 ++--
    include/linux/ptrace.h | 6 ------
    3 files changed, 4 insertions(+), 10 deletions(-)

    --- a/arch/xtensa/kernel/ptrace.c
    +++ b/arch/xtensa/kernel/ptrace.c
    @@ -225,12 +225,12 @@ const struct user_regset_view *task_user

    void user_enable_single_step(struct task_struct *child)
    {
    - child->ptrace |= PT_SINGLESTEP;
    + set_tsk_thread_flag(child, TIF_SINGLESTEP);
    }

    void user_disable_single_step(struct task_struct *child)
    {
    - child->ptrace &= ~PT_SINGLESTEP;
    + clear_tsk_thread_flag(child, TIF_SINGLESTEP);
    }

    /*
    --- a/arch/xtensa/kernel/signal.c
    +++ b/arch/xtensa/kernel/signal.c
    @@ -473,7 +473,7 @@ static void do_signal(struct pt_regs *re
    /* Set up the stack frame */
    ret = setup_frame(&ksig, sigmask_to_save(), regs);
    signal_setup_done(ret, &ksig, 0);
    - if (current->ptrace & PT_SINGLESTEP)
    + if (test_thread_flag(TIF_SINGLESTEP))
    task_pt_regs(current)->icountlevel = 1;

    return;
    @@ -499,7 +499,7 @@ static void do_signal(struct pt_regs *re
    /* If there's no signal to deliver, we just restore the saved mask. */
    restore_saved_sigmask();

    - if (current->ptrace & PT_SINGLESTEP)
    + if (test_thread_flag(TIF_SINGLESTEP))
    task_pt_regs(current)->icountlevel = 1;
    return;
    }
    --- a/include/linux/ptrace.h
    +++ b/include/linux/ptrace.h
    @@ -46,12 +46,6 @@ extern int ptrace_access_vm(struct task_
    #define PT_EXITKILL (PTRACE_O_EXITKILL << PT_OPT_FLAG_SHIFT)
    #define PT_SUSPEND_SECCOMP (PTRACE_O_SUSPEND_SECCOMP << PT_OPT_FLAG_SHIFT)

    -/* single stepping state bits (used on ARM and PA-RISC) */
    -#define PT_SINGLESTEP_BIT 31
    -#define PT_SINGLESTEP (1<<PT_SINGLESTEP_BIT)
    -#define PT_BLOCKSTEP_BIT 30
    -#define PT_BLOCKSTEP (1<<PT_BLOCKSTEP_BIT)
    -
    extern long arch_ptrace(struct task_struct *child, long request,
    unsigned long addr, unsigned long data);
    extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);

    \
     
     \ /
      Last update: 2022-09-17 16:25    [W:4.076 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site