diff options
| -rw-r--r-- | include/linux/ptrace.h | 2 | ||||
| -rw-r--r-- | include/uapi/linux/ptrace.h | 5 | ||||
| -rw-r--r-- | kernel/ptrace.c | 3 | 
3 files changed, 9 insertions, 1 deletions
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index a89ff04bddd..addfbe7c180 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h @@ -32,6 +32,8 @@  #define PT_TRACE_EXIT		PT_EVENT_FLAG(PTRACE_EVENT_EXIT)  #define PT_TRACE_SECCOMP	PT_EVENT_FLAG(PTRACE_EVENT_SECCOMP) +#define PT_EXITKILL		(PTRACE_O_EXITKILL << PT_OPT_FLAG_SHIFT) +  /* single stepping state bits (used on ARM and PA-RISC) */  #define PT_SINGLESTEP_BIT	31  #define PT_SINGLESTEP		(1<<PT_SINGLESTEP_BIT) diff --git a/include/uapi/linux/ptrace.h b/include/uapi/linux/ptrace.h index 1ef6c056a9e..022ab186a81 100644 --- a/include/uapi/linux/ptrace.h +++ b/include/uapi/linux/ptrace.h @@ -73,7 +73,10 @@  #define PTRACE_O_TRACEEXIT	(1 << PTRACE_EVENT_EXIT)  #define PTRACE_O_TRACESECCOMP	(1 << PTRACE_EVENT_SECCOMP) -#define PTRACE_O_MASK		0x000000ff +/* eventless options */ +#define PTRACE_O_EXITKILL	(1 << 20) + +#define PTRACE_O_MASK		(0x000000ff | PTRACE_O_EXITKILL)  #include <asm/ptrace.h> diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 1f5e55dda95..ec8118ab2a4 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -457,6 +457,9 @@ void exit_ptrace(struct task_struct *tracer)  		return;  	list_for_each_entry_safe(p, n, &tracer->ptraced, ptrace_entry) { +		if (unlikely(p->ptrace & PT_EXITKILL)) +			send_sig_info(SIGKILL, SEND_SIG_FORCED, p); +  		if (__ptrace_detach(tracer, p))  			list_add(&p->ptrace_entry, &ptrace_dead);  	}  |