ptrace: revert "Prepare to fix racy accesses on task breakpoints"
This reverts commitwifi-calibrationbf26c01849
("Prepare to fix racy accesses on task breakpoints"). The patch was fine but we can no longer race with SIGKILL after commit9899d11f65
("ptrace: ensure arch_ptrace/ptrace_request can never race with SIGKILL"), the __TASK_TRACED tracee can't be woken up and ->ptrace_bps[] can't go away. Now that ptrace_get_breakpoints/ptrace_put_breakpoints have no callers, we can kill them and remove task->ptrace_bp_refcnt. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Acked-by: Frederic Weisbecker <fweisbec@gmail.com> Acked-by: Michael Neuling <mikey@neuling.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jan Kratochvil <jan.kratochvil@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Will Deacon <will.deacon@arm.com> Cc: Prasad <prasad@linux.vnet.ibm.com> Cc: Russell King <linux@arm.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
parent
e8c073c4ff
commit
7c8df28633
|
@ -142,9 +142,6 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
|
|||
{
|
||||
INIT_LIST_HEAD(&child->ptrace_entry);
|
||||
INIT_LIST_HEAD(&child->ptraced);
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
atomic_set(&child->ptrace_bp_refcnt, 1);
|
||||
#endif
|
||||
child->jobctl = 0;
|
||||
child->ptrace = 0;
|
||||
child->parent = child->real_parent;
|
||||
|
@ -351,11 +348,4 @@ extern int task_current_syscall(struct task_struct *target, long *callno,
|
|||
unsigned long args[6], unsigned int maxargs,
|
||||
unsigned long *sp, unsigned long *pc);
|
||||
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
extern int ptrace_get_breakpoints(struct task_struct *tsk);
|
||||
extern void ptrace_put_breakpoints(struct task_struct *tsk);
|
||||
#else
|
||||
static inline void ptrace_put_breakpoints(struct task_struct *tsk) { }
|
||||
#endif /* CONFIG_HAVE_HW_BREAKPOINT */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1401,9 +1401,6 @@ struct task_struct {
|
|||
} memcg_batch;
|
||||
unsigned int memcg_kmem_skip_account;
|
||||
#endif
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
atomic_t ptrace_bp_refcnt;
|
||||
#endif
|
||||
#ifdef CONFIG_UPROBES
|
||||
struct uprobe_task *utask;
|
||||
#endif
|
||||
|
|
|
@ -808,7 +808,7 @@ void do_exit(long code)
|
|||
/*
|
||||
* FIXME: do that only when needed, using sched_exit tracepoint
|
||||
*/
|
||||
ptrace_put_breakpoints(tsk);
|
||||
flush_ptrace_hw_breakpoint(tsk);
|
||||
|
||||
exit_notify(tsk, group_dead);
|
||||
#ifdef CONFIG_NUMA
|
||||
|
|
|
@ -1221,19 +1221,3 @@ asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
|
|||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_COMPAT */
|
||||
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
int ptrace_get_breakpoints(struct task_struct *tsk)
|
||||
{
|
||||
if (atomic_inc_not_zero(&tsk->ptrace_bp_refcnt))
|
||||
return 0;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void ptrace_put_breakpoints(struct task_struct *tsk)
|
||||
{
|
||||
if (atomic_dec_and_test(&tsk->ptrace_bp_refcnt))
|
||||
flush_ptrace_hw_breakpoint(tsk);
|
||||
}
|
||||
#endif /* CONFIG_HAVE_HW_BREAKPOINT */
|
||||
|
|
Loading…
Reference in New Issue