[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170425173928.gaubfmxxbbvglnio@cedar>
Date: Tue, 25 Apr 2017 18:39:28 +0100
From: Jamie Iles <jamie.iles@...cle.com>
To: Oleg Nesterov <oleg@...hat.com>, linux-kernel@...r.kernel.org
Subject: SIGNAL_UNKILLABLE and init again
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
Powered by blists - more mailing lists