linux-uconsole/fs/cifs
Eric W. Biederman 6db0e28b89 signal: Allow cifs and drbd to receive their terminating signals
[ Upstream commit 33da8e7c81 ]

My recent to change to only use force_sig for a synchronous events
wound up breaking signal reception cifs and drbd.  I had overlooked
the fact that by default kthreads start out with all signals set to
SIG_IGN.  So a change I thought was safe turned out to have made it
impossible for those kernel thread to catch their signals.

Reverting the work on force_sig is a bad idea because what the code
was doing was very much a misuse of force_sig.  As the way force_sig
ultimately allowed the signal to happen was to change the signal
handler to SIG_DFL.  Which after the first signal will allow userspace
to send signals to these kernel threads.  At least for
wake_ack_receiver in drbd that does not appear actively wrong.

So correct this problem by adding allow_kernel_signal that will allow
signals whose siginfo reports they were sent by the kernel through,
but will not allow userspace generated signals, and update cifs and
drbd to call allow_kernel_signal in an appropriate place so that their
thread can receive this signal.

Fixing things this way ensures that userspace won't be able to send
signals and cause problems, that it is clear which signals the
threads are expecting to receive, and it guarantees that nothing
else in the system will be affected.

This change was partly inspired by similar cifs and drbd patches that
added allow_signal.

Reported-by: ronnie sahlberg <ronniesahlberg@gmail.com>
Reported-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
Tested-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
Cc: Steve French <smfrench@gmail.com>
Cc: Philipp Reisner <philipp.reisner@linbit.com>
Cc: David Laight <David.Laight@ACULAB.COM>
Fixes: 247bc9470b ("cifs: fix rmmod regression in cifs.ko caused by force_sig changes")
Fixes: 72abe3bcf0 ("signal/cifs: Fix cifs_put_tcp_session to call send_sig instead of force_sig")
Fixes: fee109901f ("signal/drbd: Use send_sig not force_sig")
Fixes: 3cf5d076fb ("signal: Remove task parameter from force_sig")
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-01-27 14:51:05 +01:00
..
asn1.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
cache.c cifs: use 64-bit timestamps for fscache 2018-08-07 14:15:41 -05:00
cifs_debug.c cifs: Don't display RDMA transport on reconnect 2019-12-21 10:57:33 +01:00
cifs_debug.h cifs: add server argument to the dump_detail method 2018-05-27 17:56:35 -05:00
cifs_dfs_ref.c cifs: use correct format characters 2019-04-05 22:32:59 +02:00
cifs_fs_sb.h cifs: Properly handle auto disabling of serverino option 2019-09-16 08:22:17 +02:00
cifs_ioctl.h Enable previous version support 2016-10-13 19:48:11 -05:00
cifs_spnego.c smb3: on kerberos mount if server doesn't specify auth type use krb5 2018-11-13 11:08:48 -08:00
cifs_spnego.h
cifs_unicode.c fs/cifs: don't translate SFM_SLASH (U+F026) to backslash 2018-09-02 23:21:42 -05:00
cifs_unicode.h [SMB3] Remove ifdef since SMB3 (and later) now STRONGLY preferred 2017-07-08 18:57:07 -05:00
cifs_uniupr.h
cifsacl.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
cifsacl.h cifs: For SMB2 security informaion query, check for minimum sized security descriptor instead of sizeof FileAllInformation class 2018-06-04 19:19:24 -05:00
cifsencrypt.c cifs: Make sure all data pages are signed correctly 2018-08-07 14:15:41 -05:00
cifsfs.c smb3: allow disabling requesting leases 2019-10-05 13:10:08 +02:00
cifsfs.h cifs: update internal module version number for cifs.ko to 2.12 2018-08-23 15:11:10 -05:00
cifsglob.h cifs: Fix cifsInodeInfo lock_sem deadlock when reconnect occurs 2019-11-10 11:27:34 +01:00
cifspdu.h CIFS: move DFS response parsing out of SMB1 code 2017-03-01 22:26:10 -06:00
cifsproto.h cifs: Fix cifsInodeInfo lock_sem deadlock when reconnect occurs 2019-11-10 11:27:34 +01:00
cifssmb.c CIFS: Respect SMB2 hdr preamble size in read responses 2019-11-06 13:05:35 +01:00
connect.c signal: Allow cifs and drbd to receive their terminating signals 2020-01-27 14:51:05 +01:00
dir.c CIFS: Force reval dentry if LOOKUP_REVAL flag is set 2019-10-17 13:45:17 -07:00
dns_resolve.c
dns_resolve.h
export.c
file.c CIFS: Respect O_SYNC and O_DIRECT flags during reconnect 2019-12-21 10:57:34 +01:00
fscache.c cifs: use 64-bit timestamps for fscache 2018-08-07 14:15:41 -05:00
fscache.h cifs: use 64-bit timestamps for fscache 2018-08-07 14:15:41 -05:00
inode.c CIFS: Force revalidate inode when dentry is stale 2019-10-17 13:45:17 -07:00
ioctl.c [SMB3] Remove ifdef since SMB3 (and later) now STRONGLY preferred 2017-07-08 18:57:07 -05:00
Kconfig cifs: In Kconfig CONFIG_CIFS_POSIX needs depends on legacy (insecure cifs) 2018-12-21 14:15:23 +01:00
link.c smb3: don't request leases in symlink creation and query 2018-08-07 14:15:57 -05:00
Makefile smb3: Add ftrace tracepoints for improved SMB3 debugging 2018-05-27 17:56:35 -05:00
misc.c cifs: Properly handle auto disabling of serverino option 2019-09-16 08:22:17 +02:00
netmisc.c fs: cifs: mute -Wunused-const-variable message 2019-11-06 13:05:51 +01:00
nterr.c
nterr.h
ntlmssp.h
readdir.c cifs: check ntwrk_buf_start for NULL before dereferencing it 2019-02-12 19:47:17 +01:00
rfc1002pdu.h
sess.c cifs: check kmalloc before use 2018-08-23 15:10:49 -05:00
smb1ops.c CIFS: avoid using MID 0xFFFF 2019-10-29 09:20:01 +01:00
smb2file.c cifs: Adjust indentation in smb2_open_file 2020-01-17 19:47:01 +01:00
smb2glob.h cifs: remove struct smb2_hdr 2018-06-01 09:14:30 -05:00
smb2inode.c smb3: Do not send SMB3 SET_INFO if nothing changed 2018-08-07 14:30:59 -05:00
smb2maperror.c SMB3: retry on STATUS_INSUFFICIENT_RESOURCES instead of failing write 2019-06-25 11:36:01 +08:00
smb2misc.c CIFS: Close open handle after interrupted close 2019-12-21 10:57:35 +01:00
smb2ops.c CIFS: Respect SMB2 hdr preamble size in read responses 2019-11-06 13:05:35 +01:00
smb2pdu.c CIFS: Close open handle after interrupted close 2019-12-21 10:57:35 +01:00
smb2pdu.h SMB3: Fix persistent handles reconnect 2019-11-12 19:20:42 +01:00
smb2proto.h CIFS: Close open handle after interrupted close 2019-12-21 10:57:35 +01:00
smb2status.h
smb2transport.c CIFS: Do not skip SMB2 message IDs on send failures 2019-03-23 20:09:56 +01:00
smbdirect.c cifs: smbd: Return -EINVAL when the number of iovs exceeds SMBDIRECT_MAX_SGE 2019-12-21 10:57:32 +01:00
smbdirect.h cifs: smbd: take an array of reqeusts when sending upper layer data 2019-09-16 08:22:13 +02:00
smbencrypt.c CIFS: refactor crypto shash/sdesc allocation&free 2018-04-01 20:24:39 -05:00
smberr.h
smbfsctl.h
trace.c smb3: Add ftrace tracepoints for improved SMB3 debugging 2018-05-27 17:56:35 -05:00
trace.h smb3: add tracepoint for slow responses 2018-08-07 14:28:01 -05:00
transport.c cifs: smbd: Return -EAGAIN when transport is reconnecting 2019-12-21 10:57:31 +01:00
winucase.c
xattr.c CIFS: fix max ea value size 2019-10-05 13:10:12 +02:00