diff options
Diffstat (limited to 'kernel/ptrace.c')
| -rw-r--r-- | kernel/ptrace.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index c890ac9a796..00ab2ca5ed1 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -8,7 +8,7 @@   */  #include <linux/capability.h> -#include <linux/module.h> +#include <linux/export.h>  #include <linux/sched.h>  #include <linux/errno.h>  #include <linux/mm.h> @@ -96,9 +96,20 @@ void __ptrace_unlink(struct task_struct *child)  	 */  	if (!(child->flags & PF_EXITING) &&  	    (child->signal->flags & SIGNAL_STOP_STOPPED || -	     child->signal->group_stop_count)) +	     child->signal->group_stop_count)) {  		child->jobctl |= JOBCTL_STOP_PENDING; +		/* +		 * This is only possible if this thread was cloned by the +		 * traced task running in the stopped group, set the signal +		 * for the future reports. +		 * FIXME: we should change ptrace_init_task() to handle this +		 * case. +		 */ +		if (!(child->jobctl & JOBCTL_STOP_SIGMASK)) +			child->jobctl |= SIGSTOP; +	} +  	/*  	 * If transition to TASK_STOPPED is pending or in TASK_TRACED, kick  	 * @child in the butt.  Note that @resume should be used iff @child  |