Re: SIGNAL_UNKILLABLE and init again
From: Oleg Nesterov
Date: Wed Apr 26 2017 - 11:23:22 EST
Hi Jamie,
On 04/25, Jamie Iles wrote:
>
> Hi Oleg,
>
> I'm back looking at SIGNAL_UNKILLABLE and debugging child reapers again,
> and the current issue is when running code in the target process,
> SIGTRAP firing and that causing SIGNAL_UNKILLABLE protection to be
> removed in force_sig_info():
>
> if (action->sa.sa_handler == SIG_DFL)
> t->signal->flags &= ~SIGNAL_UNKILLABLE;
Yes, this is what I meant when I said force_sig_info() needs changes too.
I was going to fix it "tomorrow" but I was distracted and then forgot.
> @@ -1185,7 +1185,7 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t)
> recalc_sigpending_and_wake(t);
> }
> }
> - if (action->sa.sa_handler == SIG_DFL)
> + if (action->sa.sa_handler == SIG_DFL && !t->ptrace)
> t->signal->flags &= ~SIGNAL_UNKILLABLE;
> ret = specific_send_sig_info(sig, info, t);
> spin_unlock_irqrestore(&t->sighand->siglock, flags);
Not sure, let me think a bit more... and this is not enough anyway.
perhaps we should start with this simple change, but the "real" fix
needs a lot of cleanups, although I am not sure if we will ever do this.
Oleg.