.. | .. |
---|
| 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; |
---|