Commit 321fb561 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Tejun Heo

ptrace: ptrace_check_attach() should not do s/STOPPED/TRACED/

After "ptrace: Clean transitions between TASK_STOPPED and TRACED"
d79fdd6d, ptrace_check_attach()
should never see a TASK_STOPPED tracee and s/STOPPED/TRACED/ is
no longer legal. Add the warning.

Note: ptrace_check_attach() can be greatly simplified, in particular
it doesn't need tasklist. But I'd prefer another patch for that.
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent ee77f075
...@@ -112,16 +112,14 @@ int ptrace_check_attach(struct task_struct *child, int kill) ...@@ -112,16 +112,14 @@ int ptrace_check_attach(struct task_struct *child, int kill)
*/ */
read_lock(&tasklist_lock); read_lock(&tasklist_lock);
if ((child->ptrace & PT_PTRACED) && child->parent == current) { if ((child->ptrace & PT_PTRACED) && child->parent == current) {
ret = 0;
/* /*
* child->sighand can't be NULL, release_task() * child->sighand can't be NULL, release_task()
* does ptrace_unlink() before __exit_signal(). * does ptrace_unlink() before __exit_signal().
*/ */
spin_lock_irq(&child->sighand->siglock); spin_lock_irq(&child->sighand->siglock);
if (task_is_stopped(child)) WARN_ON_ONCE(task_is_stopped(child));
child->state = TASK_TRACED; if (task_is_traced(child) || kill)
else if (!task_is_traced(child) && !kill) ret = 0;
ret = -ESRCH;
spin_unlock_irq(&child->sighand->siglock); spin_unlock_irq(&child->sighand->siglock);
} }
read_unlock(&tasklist_lock); read_unlock(&tasklist_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment