| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0 |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) |
|---|
| 3 | | - * Licensed under the GPL |
|---|
| 4 | 4 | */ |
|---|
| 5 | 5 | |
|---|
| 6 | 6 | #include <linux/audit.h> |
|---|
| .. | .. |
|---|
| 12 | 12 | |
|---|
| 13 | 13 | void user_enable_single_step(struct task_struct *child) |
|---|
| 14 | 14 | { |
|---|
| 15 | | - child->ptrace |= PT_DTRACE; |
|---|
| 15 | + set_tsk_thread_flag(child, TIF_SINGLESTEP); |
|---|
| 16 | 16 | child->thread.singlestep_syscall = 0; |
|---|
| 17 | 17 | |
|---|
| 18 | 18 | #ifdef SUBARCH_SET_SINGLESTEPPING |
|---|
| .. | .. |
|---|
| 22 | 22 | |
|---|
| 23 | 23 | void user_disable_single_step(struct task_struct *child) |
|---|
| 24 | 24 | { |
|---|
| 25 | | - child->ptrace &= ~PT_DTRACE; |
|---|
| 25 | + clear_tsk_thread_flag(child, TIF_SINGLESTEP); |
|---|
| 26 | 26 | child->thread.singlestep_syscall = 0; |
|---|
| 27 | 27 | |
|---|
| 28 | 28 | #ifdef SUBARCH_SET_SINGLESTEPPING |
|---|
| .. | .. |
|---|
| 66 | 66 | |
|---|
| 67 | 67 | #ifdef PTRACE_GETREGS |
|---|
| 68 | 68 | case PTRACE_GETREGS: { /* Get all gp regs from the child. */ |
|---|
| 69 | | - if (!access_ok(VERIFY_WRITE, p, MAX_REG_OFFSET)) { |
|---|
| 69 | + if (!access_ok(p, MAX_REG_OFFSET)) { |
|---|
| 70 | 70 | ret = -EIO; |
|---|
| 71 | 71 | break; |
|---|
| 72 | 72 | } |
|---|
| .. | .. |
|---|
| 81 | 81 | #ifdef PTRACE_SETREGS |
|---|
| 82 | 82 | case PTRACE_SETREGS: { /* Set all gp regs in the child. */ |
|---|
| 83 | 83 | unsigned long tmp = 0; |
|---|
| 84 | | - if (!access_ok(VERIFY_READ, p, MAX_REG_OFFSET)) { |
|---|
| 84 | + if (!access_ok(p, MAX_REG_OFFSET)) { |
|---|
| 85 | 85 | ret = -EIO; |
|---|
| 86 | 86 | break; |
|---|
| 87 | 87 | } |
|---|
| .. | .. |
|---|
| 112 | 112 | return ret; |
|---|
| 113 | 113 | } |
|---|
| 114 | 114 | |
|---|
| 115 | | -static void send_sigtrap(struct task_struct *tsk, struct uml_pt_regs *regs, |
|---|
| 116 | | - int error_code) |
|---|
| 115 | +static void send_sigtrap(struct uml_pt_regs *regs, int error_code) |
|---|
| 117 | 116 | { |
|---|
| 118 | 117 | /* Send us the fake SIGTRAP */ |
|---|
| 119 | 118 | force_sig_fault(SIGTRAP, TRAP_BRKPT, |
|---|
| 120 | 119 | /* User-mode eip? */ |
|---|
| 121 | | - UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL, tsk); |
|---|
| 120 | + UPT_IS_USER(regs) ? (void __user *) UPT_IP(regs) : NULL); |
|---|
| 122 | 121 | } |
|---|
| 123 | 122 | |
|---|
| 124 | 123 | /* |
|---|
| 125 | | - * XXX Check PT_DTRACE vs TIF_SINGLESTEP for singlestepping check and |
|---|
| 124 | + * XXX Check TIF_SINGLESTEP for singlestepping check and |
|---|
| 126 | 125 | * PT_PTRACED vs TIF_SYSCALL_TRACE for syscall tracing check |
|---|
| 127 | 126 | */ |
|---|
| 128 | 127 | int syscall_trace_enter(struct pt_regs *regs) |
|---|
| .. | .. |
|---|
| 146 | 145 | audit_syscall_exit(regs); |
|---|
| 147 | 146 | |
|---|
| 148 | 147 | /* Fake a debug trap */ |
|---|
| 149 | | - if (ptraced & PT_DTRACE) |
|---|
| 150 | | - send_sigtrap(current, ®s->regs, 0); |
|---|
| 148 | + if (test_thread_flag(TIF_SINGLESTEP)) |
|---|
| 149 | + send_sigtrap(®s->regs, 0); |
|---|
| 151 | 150 | |
|---|
| 152 | 151 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) |
|---|
| 153 | 152 | return; |
|---|