Hi Eric, On Thu, Feb 07, 2019 at 11:13:59PM -0600, Eric W. Biederman wrote: > I just noticed this. From my patch queue that I intend to send to > Linus tomorrow. I think this change fixes your issue of getting > the SIGSEGV instead of the already pending fatal signal. > > So I think this fixes your issue without any other code changes. > Ivan can you verify that the patch below is enough?
I was having issues with just this patch applied on top of v5.0-rc5 or the latest master: defunct processes accumulating, exiting processes that would hang forever, and some kernel functions eating all the CPU (setup_sigcontext, common_interrupt, __clear_user, do_signal…). But using your user-namespace.git/for-linus worked great and I've been running my reproducer for a few hours now without issue. I'll probably keep it running over the week-end as it has been unreliable at times, but it looks promising so far. A difference I've noticed with your tree (unrelated to my issue here but that you may want to look at) is when I run my reproducer under strace -f, I'm now getting quite a lot of "Exit of unknown pid 12345 ignored" warnings from strace, which I've never seen with mainline. My reproducer simply fork-exec tail processes in a loop, and tries to sigkill them in the parent with a variable delay. Thank you, > diff --git a/kernel/signal.c b/kernel/signal.c > index 9ca8e5278c8e..5424cb0006bc 100644 > --- a/kernel/signal.c > +++ b/kernel/signal.c > @@ -2393,6 +2393,11 @@ bool get_signal(struct ksignal *ksig) > goto relock; > } > > + /* Has this task already been marked for death? */ > + ksig->info.si_signo = signr = SIGKILL; > + if (signal_group_exit(signal)) > + goto fatal; > + > for (;;) { > struct k_sigaction *ka; > > @@ -2488,6 +2493,7 @@ bool get_signal(struct ksignal *ksig) > continue; > } > > + fatal: > spin_unlock_irq(&sighand->siglock); > > -- Ivan Delalande Arista Networks