* SIGNAL_UNKILLABLE and init again
@ 2017-04-25 17:39 Jamie Iles
2017-04-26 15:18 ` Oleg Nesterov
0 siblings, 1 reply; 5+ messages in thread
From: Jamie Iles @ 2017-04-25 17:39 UTC (permalink / raw)
To: Oleg Nesterov, linux-kernel
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;
Would relaxing that if the task is being traced with something like
diff --git i/kernel/signal.c w/kernel/signal.c
index 7e59ebc2c25e..f701f1889895 100644
--- i/kernel/signal.c
+++ w/kernel/signal.c
@@ -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);
make any sense? It does address the issue that I'm seeing, but are
there any downsides to doing so?
Thanks,
Jamie
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: SIGNAL_UNKILLABLE and init again
2017-04-25 17:39 SIGNAL_UNKILLABLE and init again Jamie Iles
@ 2017-04-26 15:18 ` Oleg Nesterov
2017-04-27 12:16 ` Jamie Iles
0 siblings, 1 reply; 5+ messages in thread
From: Oleg Nesterov @ 2017-04-26 15:18 UTC (permalink / raw)
To: Jamie Iles; +Cc: linux-kernel
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.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: SIGNAL_UNKILLABLE and init again
2017-04-26 15:18 ` Oleg Nesterov
@ 2017-04-27 12:16 ` Jamie Iles
2017-08-14 9:31 ` Jamie Iles
0 siblings, 1 reply; 5+ messages in thread
From: Jamie Iles @ 2017-04-27 12:16 UTC (permalink / raw)
To: Oleg Nesterov; +Cc: Jamie Iles, linux-kernel
On Wed, Apr 26, 2017 at 05:18:58PM +0200, Oleg Nesterov wrote:
> 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.
Okay, sounds good. I'm happy to spend more time looking at this if you
have suggestions - in the context of namespaces and containers this
seems more relevant than when it was just the system init that we were
protecting.
Jamie
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: SIGNAL_UNKILLABLE and init again
2017-04-27 12:16 ` Jamie Iles
@ 2017-08-14 9:31 ` Jamie Iles
2017-08-14 16:24 ` Oleg Nesterov
0 siblings, 1 reply; 5+ messages in thread
From: Jamie Iles @ 2017-08-14 9:31 UTC (permalink / raw)
To: Oleg Nesterov; +Cc: linux-kernel
Hi Oleg,
On Thu, Apr 27, 2017 at 01:16:51PM +0100, Jamie Iles wrote:
> On Wed, Apr 26, 2017 at 05:18:58PM +0200, Oleg Nesterov wrote:
> > 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.
>
> Okay, sounds good. I'm happy to spend more time looking at this if you
> have suggestions - in the context of namespaces and containers this
> seems more relevant than when it was just the system init that we were
> protecting.
Any objections to moving ahead with this patch?
Thanks,
Jamie
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: SIGNAL_UNKILLABLE and init again
2017-08-14 9:31 ` Jamie Iles
@ 2017-08-14 16:24 ` Oleg Nesterov
0 siblings, 0 replies; 5+ messages in thread
From: Oleg Nesterov @ 2017-08-14 16:24 UTC (permalink / raw)
To: Jamie Iles; +Cc: linux-kernel
Hi Jamie,
On 08/14, Jamie Iles wrote:
>
> > > 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.
> >
> > Okay, sounds good. I'm happy to spend more time looking at this if you
> > have suggestions - in the context of namespaces and containers this
> > seems more relevant than when it was just the system init that we were
> > protecting.
>
> Any objections to moving ahead with this patch?
Oh, sorry.
OK, lets do this simple change then try to improve this logic further.
I'm afraid you need to re-send your patch, sorry.
Oleg.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-08-14 16:24 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-25 17:39 SIGNAL_UNKILLABLE and init again Jamie Iles
2017-04-26 15:18 ` Oleg Nesterov
2017-04-27 12:16 ` Jamie Iles
2017-08-14 9:31 ` Jamie Iles
2017-08-14 16:24 ` Oleg Nesterov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).