|
@@ -100,8 +100,7 @@ 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 &&
|
|
- (!(child->ptrace & PT_ATTACHED) || child->real_parent != current)
|
|
|
|
- && child->signal != NULL) {
|
|
|
|
|
|
+ child->signal != NULL) {
|
|
ret = 0;
|
|
ret = 0;
|
|
spin_lock_irq(&child->sighand->siglock);
|
|
spin_lock_irq(&child->sighand->siglock);
|
|
if (task_is_stopped(child))
|
|
if (task_is_stopped(child))
|
|
@@ -200,8 +199,7 @@ repeat:
|
|
goto bad;
|
|
goto bad;
|
|
|
|
|
|
/* Go */
|
|
/* Go */
|
|
- task->ptrace |= PT_PTRACED | ((task->real_parent != current)
|
|
|
|
- ? PT_ATTACHED : 0);
|
|
|
|
|
|
+ task->ptrace |= PT_PTRACED;
|
|
if (capable(CAP_SYS_PTRACE))
|
|
if (capable(CAP_SYS_PTRACE))
|
|
task->ptrace |= PT_PTRACE_CAP;
|
|
task->ptrace |= PT_PTRACE_CAP;
|
|
|
|
|