linux-stable/fs/cifs
Steve French b7c792f6d3 SMB3: force unmount was failing to close deferred close files
commit 2cb6f96877 upstream.

In investigating a failure with xfstest generic/392 it
was noticed that mounts were reusing a superblock that should
already have been freed. This turned out to be related to
deferred close files keeping a reference count until the
closetimeo expired.

Currently the only way an fs knows that mount is beginning is
when force unmount is called, but when this, ie umount_begin(),
is called all deferred close files on the share (tree
connection) should be closed immediately (unless shared by
another mount) to avoid using excess resources on the server
and to avoid reusing a superblock which should already be freed.

In umount_begin, close all deferred close handles for that
share if this is the last mount using that share on this
client (ie send the SMB3 close request over the wire for those
that have been already closed by the app but that we have
kept a handle lease open for and have not sent closes to the
server for yet).

Reported-by: David Howells <dhowells@redhat.com>
Acked-by: Bharath SM <bharathsm@microsoft.com>
Cc: <stable@vger.kernel.org>
Fixes: 78c09634f7 ("Cifs: Fix kernel oops caused by deferred close for files.")
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-05-17 13:59:00 +02:00
..
Kconfig cifs: Support fscache indexing rewrite 2022-01-19 11:21:08 -06:00
Makefile cifs: get rid of mount options string parsing 2022-12-19 08:03:11 -06:00
asn1.c cifs: decoding negTokenInit with generic ASN1 decoder 2021-06-20 21:28:17 -05:00
cached_dir.c cifs: fix dentry lookups in directory handle cache 2023-03-30 12:51:32 +02:00
cached_dir.h cifs: drop the lease for cached directories on rmdir or rename 2022-10-19 17:57:41 -05:00
cifs_debug.c cifs: fix potential use-after-free bugs in TCP_Server_Info::hostname 2023-05-11 23:11:35 +09:00
cifs_debug.h cifs: fix potential use-after-free bugs in TCP_Server_Info::hostname 2023-05-11 23:11:35 +09:00
cifs_dfs_ref.c cifs: avoid dup prefix path in dfs_get_automount_devname() 2023-04-26 14:30:07 +02:00
cifs_fs_sb.h cifs: fix use-after-free bug in refresh_cache_worker() 2023-03-22 13:38:01 +01:00
cifs_ioctl.h cifs: minor cleanup of some headers 2022-12-12 13:08:06 -06:00
cifs_spnego.c cred: Do not default to init_cred in prepare_kernel_cred() 2022-11-01 10:04:52 -07:00
cifs_spnego.h cifs: use the chans_need_reconnect bitmap for reconnect status 2022-01-02 20:38:46 -06:00
cifs_spnego_negtokeninit.asn1 cifs: decoding negTokenInit with generic ASN1 decoder 2021-06-20 21:28:17 -05:00
cifs_swn.c smb3: add dynamic trace points for tree disconnect 2022-10-05 01:31:18 -05:00
cifs_swn.h cifs: simplify SWN code with dummy funcs instead of ifdefs 2021-04-25 16:28:22 -05:00
cifs_unicode.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifs_unicode.h
cifs_uniupr.h
cifsacl.c cifs: Fix uninitialized memory reads for oparms.mode 2023-03-10 09:29:26 +01:00
cifsacl.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
cifsencrypt.c cifs: fix potential memory leaks in session setup 2023-01-10 23:24:37 -06:00
cifsfs.c SMB3: force unmount was failing to close deferred close files 2023-05-17 13:59:00 +02:00
cifsfs.h cifs: fix DFS traversal oops without CONFIG_CIFS_DFS_UPCALL 2023-04-06 12:12:41 +02:00
cifsglob.h cifs: avoid potential races when handling multiple dfs tcons 2023-05-17 13:58:56 +02:00
cifspdu.h cifs: fix various whitespace errors in headers 2022-12-12 13:08:22 -06:00
cifsproto.h cifs: fix sharing of DFS connections 2023-05-11 23:11:35 +09:00
cifsroot.c cifs: move from strlcpy with unused retval to strscpy 2022-08-19 11:02:26 -05:00
cifssmb.c cifs: prevent infinite recursion in CIFSGetDFSRefer() 2023-04-06 12:12:41 +02:00
connect.c smb3: fix problem remounting a share after shutdown 2023-05-17 13:58:59 +02:00
dfs.c cifs: avoid potential races when handling multiple dfs tcons 2023-05-17 13:58:56 +02:00
dfs.h cifs: protect access of TCP_Server_Info::{origin,leaf}_fullpath 2023-05-11 23:11:36 +09:00
dfs_cache.c cifs: avoid potential races when handling multiple dfs tcons 2023-05-17 13:58:56 +02:00
dfs_cache.h cifs: avoid potential races when handling multiple dfs tcons 2023-05-17 13:58:56 +02:00
dir.c cifs: Fix uninitialized memory reads for oparms.mode 2023-03-10 09:29:26 +01:00
dns_resolve.c cifs: set resolved ip in sockaddr 2022-12-19 08:03:11 -06:00
dns_resolve.h cifs: set resolved ip in sockaddr 2022-12-19 08:03:11 -06:00
export.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
file.c cifs: check only tcon status on tcon related functions 2023-05-17 13:58:55 +02:00
fs_context.c cifs: sanitize paths in cifs_update_super_prepath. 2023-04-13 17:02:53 +02:00
fs_context.h cifs: sanitize paths in cifs_update_super_prepath. 2023-04-13 17:02:53 +02:00
fscache.c use less confusing names for iov_iter direction initializers 2022-11-25 13:01:55 -05:00
fscache.h cifs: Remove {cifs,nfs}_fscache_release_page() 2022-08-10 21:26:08 -05:00
inode.c cifs: Fix uninitialized memory reads for oparms.mode 2023-03-10 09:29:26 +01:00
ioctl.c cifs: fix sharing of DFS connections 2023-05-11 23:11:35 +09:00
link.c cifs: append path to open_enter trace event 2023-03-30 12:51:32 +02:00
misc.c SMB3: Close deferred file handles in case of handle lease break 2023-05-11 23:11:30 +09:00
netlink.c genetlink: start to validate reserved header bytes 2022-08-29 12:47:15 +01:00
netlink.h cifs: Register generic netlink family 2020-12-14 09:16:22 -06:00
netmisc.c cifs: remove unused server parameter from calc_smb_size() 2022-08-17 18:07:13 -05:00
nterr.c
nterr.h
ntlmssp.h treewide: Replace zero-length arrays with flexible-array members 2022-02-17 07:00:39 -06:00
readdir.c cifs: improve symlink handling for smb2+ 2022-10-13 09:36:04 -05:00
rfc1002pdu.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
sess.c cifs: fix potential use-after-free bugs in TCP_Server_Info::hostname 2023-05-11 23:11:35 +09:00
smb1ops.c cifs: Fix uninitialized memory reads for oparms.mode 2023-03-10 09:29:26 +01:00
smb2file.c cifs: don't leak -ENOMEM in smb2_open_file() 2022-12-19 08:04:41 -06:00
smb2glob.h smb3: move defines for ioctl protocol header and SMB2 sizes to smbfs_common 2022-03-26 23:09:20 -05:00
smb2inode.c cifs: append path to open_enter trace event 2023-03-30 12:51:32 +02:00
smb2maperror.c cifs: Create a new shared file holding smb2 pdu definitions 2021-11-05 09:50:57 -05:00
smb2misc.c cifs: avoid unnecessary iteration of tcp sessions 2022-11-04 23:34:40 -05:00
smb2ops.c cifs: fix pcchunk length type in smb2_copychunk_range 2023-05-17 13:58:58 +02:00
smb2pdu.c cifs: fix sharing of DFS connections 2023-05-11 23:11:35 +09:00
smb2pdu.h cifs: improve symlink handling for smb2+ 2022-10-13 09:36:04 -05:00
smb2proto.h cifs: Parse owner/group for stat in smb311 posix extensions 2022-12-08 09:51:53 -06:00
smb2status.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
smb2transport.c cifs: avoid race conditions with parallel reconnects 2023-04-06 12:12:23 +02:00
smbdirect.c cifs: Fix warning and UAF when destroy the MR list 2023-03-10 09:28:42 +01:00
smbdirect.h Decrease the number of SMB3 smbdirect client SGEs 2022-10-05 01:29:21 -05:00
smbencrypt.c cifs: rename cifs_common to smbfs_common 2021-09-08 23:59:26 -05:00
smberr.h cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
trace.c
trace.h cifs: append path to open_enter trace event 2023-03-30 12:51:32 +02:00
transport.c cifs: Move the in_send statistic to __smb_send_rqst() 2023-03-22 13:37:41 +01:00
unc.c cifs: don't cargo-cult strndup() 2021-04-25 16:28:23 -05:00
winucase.c cifs: remove pathname for file from SPDX header 2021-09-13 14:51:10 -05:00
xattr.c cifs: use stub posix acl handlers 2022-10-20 10:13:32 +02:00