diff options
Diffstat (limited to 'kernel/signal.c')
| -rw-r--r-- | kernel/signal.c | 13 | 
1 files changed, 8 insertions, 5 deletions
| diff --git a/kernel/signal.c b/kernel/signal.c index dd72567767d..113411bfe8b 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -32,6 +32,7 @@  #include <linux/user_namespace.h>  #include <linux/uprobes.h>  #include <linux/compat.h> +#include <linux/cn_proc.h>  #define CREATE_TRACE_POINTS  #include <trace/events/signal.h> @@ -854,12 +855,14 @@ static void ptrace_trap_notify(struct task_struct *t)   * Returns true if the signal should be actually delivered, otherwise   * it should be dropped.   */ -static int prepare_signal(int sig, struct task_struct *p, bool force) +static bool prepare_signal(int sig, struct task_struct *p, bool force)  {  	struct signal_struct *signal = p->signal;  	struct task_struct *t; -	if (unlikely(signal->flags & SIGNAL_GROUP_EXIT)) { +	if (signal->flags & (SIGNAL_GROUP_EXIT | SIGNAL_GROUP_COREDUMP)) { +		if (signal->flags & SIGNAL_GROUP_COREDUMP) +			return sig == SIGKILL;  		/*  		 * The process is in the middle of dying, nothing to do.  		 */ @@ -1160,8 +1163,7 @@ static int send_signal(int sig, struct siginfo *info, struct task_struct *t,  static void print_fatal_signal(int signr)  {  	struct pt_regs *regs = signal_pt_regs(); -	printk(KERN_INFO "%s/%d: potentially unexpected fatal signal %d.\n", -		current->comm, task_pid_nr(current), signr); +	printk(KERN_INFO "potentially unexpected fatal signal %d.\n", signr);  #if defined(__i386__) && !defined(__arch_um__)  	printk(KERN_INFO "code at %08lx: ", regs->ip); @@ -2350,6 +2352,7 @@ relock:  		if (sig_kernel_coredump(signr)) {  			if (print_fatal_signals)  				print_fatal_signal(info->si_signo); +			proc_coredump_connector(current);  			/*  			 * If it was able to dump core, this kills all  			 * other threads in the group and synchronizes with @@ -2948,7 +2951,7 @@ do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info)  static int do_tkill(pid_t tgid, pid_t pid, int sig)  { -	struct siginfo info; +	struct siginfo info = {};  	info.si_signo = sig;  	info.si_errno = 0; | 
