RE: [PATCH] drbd: do not ignore signals in threads

From: David Laight
Date: Mon Aug 12 2019 - 09:12:22 EST


From: Philipp Reisner
> Sent: 12 August 2019 12:53
> Hi Jens,
>
> Please have a look.
>
> With fee109901f392 Eric W. Biederman changed drbd to use send_sig()
> instead of force_sig(). That was part of a series that did this change
> in multiple call sites tree wide. Which, by accident broke drbd, since
> the signals are _not_ allowed by default. That got released with v5.2.
>
> On July 29 Christoph BÃhmwalder sent a patch that adds two
> allow_signal()s to fix drbd.
>
> Then David Laight points out that he has code that can not deal
> with the send_sig() instead of force_sig() because allowed signals
> can be sent from user-space as well.
> I assume that David is referring to out of tree code, so I fear it
> is up to him to fix that to work with upstream, or initiate a
> revert of Eric's change.

While our code is 'out of tree' (you really don't want it - and since
it still uses force_sig() is fine) I suspect that the 'drdb' code
(with Christoph's allow_signal() patch) now loops in kernel if a user
sends it a signal.

If the driver (eg drdb) is using (say) SIGINT to break a thread out of
(say) a blocking kernel_accept() call then it can detect the unexpected
signal (maybe double-checking with signal_pending()) but I don't think
it can clear down the pending signal so that kernel_accept() blocks
again.

> Jens, please consider sending Christoph's path to Linus for merge in
> this cycle, or let us know how you think we should proceed.

I'm not sure what the 'correct' solution is.

David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)