linux/fs/smb/server
Marios Makassikis 807252f028 ksmbd: fix recursive locking in vfs helpers
Running smb2.rename test from Samba smbtorture suite against a kernel built
with lockdep triggers a "possible recursive locking detected" warning.

This is because mnt_want_write() is called twice with no mnt_drop_write()
in between:
  -> ksmbd_vfs_mkdir()
    -> ksmbd_vfs_kern_path_create()
       -> kern_path_create()
          -> filename_create()
            -> mnt_want_write()
       -> mnt_want_write()

Fix this by removing the mnt_want_write/mnt_drop_write calls from vfs
helpers that call kern_path_create().

Full lockdep trace below:

============================================
WARNING: possible recursive locking detected
6.6.0-rc5 #775 Not tainted
--------------------------------------------
kworker/1:1/32 is trying to acquire lock:
ffff888005ac83f8 (sb_writers#5){.+.+}-{0:0}, at: ksmbd_vfs_mkdir+0xe1/0x410

but task is already holding lock:
ffff888005ac83f8 (sb_writers#5){.+.+}-{0:0}, at: filename_create+0xb6/0x260

other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(sb_writers#5);
  lock(sb_writers#5);

 *** DEADLOCK ***

 May be due to missing lock nesting notation

4 locks held by kworker/1:1/32:
 #0: ffff8880064e4138 ((wq_completion)ksmbd-io){+.+.}-{0:0}, at: process_one_work+0x40e/0x980
 #1: ffff888005b0fdd0 ((work_completion)(&work->work)){+.+.}-{0:0}, at: process_one_work+0x40e/0x980
 #2: ffff888005ac83f8 (sb_writers#5){.+.+}-{0:0}, at: filename_create+0xb6/0x260
 #3: ffff8880057ce760 (&type->i_mutex_dir_key#3/1){+.+.}-{3:3}, at: filename_create+0x123/0x260

Cc: stable@vger.kernel.org
Fixes: 40b268d384 ("ksmbd: add mnt_want_write to ksmbd vfs functions")
Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
2023-10-22 19:06:27 -05:00
..
mgmt ksmbd: Remove unused field in ksmbd_user struct 2023-10-22 19:06:27 -05:00
asn1.c ksmbd: switch to use kmemdup_nul() helper 2023-08-29 12:30:19 -05:00
asn1.h
auth.c ksmbd: fix slub overflow in ksmbd_decode_ntlmssp_auth_blob() 2023-08-29 12:30:20 -05:00
auth.h
connection.c ksmbd: fix race condition between session lookup and expire 2023-10-04 20:21:48 -05:00
connection.h ksmbd: fix race condition between session lookup and expire 2023-10-04 20:21:48 -05:00
crypto_ctx.c
crypto_ctx.h
glob.h
Kconfig ksmbd: remove experimental warning 2023-09-03 21:06:36 -05:00
ksmbd_netlink.h ksmbd: check if a mount point is crossed during path lookup 2023-07-23 10:25:11 -05:00
ksmbd_spnego_negtokeninit.asn1
ksmbd_spnego_negtokentarg.asn1
ksmbd_work.c ksmbd: reorganize ksmbd_iov_pin_rsp() 2023-10-22 19:06:27 -05:00
ksmbd_work.h ksmbd: fix wrong interim response on compound 2023-08-29 12:30:19 -05:00
Makefile
misc.c
misc.h
ndr.c
ndr.h
nterr.h
ntlmssp.h
oplock.c ksmbd: fix wrong DataOffset validation of create context 2023-08-29 12:30:20 -05:00
oplock.h
server.c ksmbd: fix race condition between tree conn lookup and disconnect 2023-10-04 21:56:28 -05:00
server.h
smb_common.c ksmbd: add support for read compound 2023-08-29 12:30:19 -05:00
smb_common.h ksmbd: fix out of bounds in init_smb2_rsp_hdr() 2023-07-23 10:25:11 -05:00
smb2misc.c ksmbd: return invalid parameter error response if smb2 request is invalid 2023-09-21 14:41:06 -05:00
smb2ops.c
smb2pdu.c ksmbd: fix potential double free on smb2_read_pipe() error path 2023-10-12 22:44:11 -05:00
smb2pdu.h ksmbd: replace one-element array with flex-array member in struct smb2_ea_info 2023-08-29 12:30:20 -05:00
smbacl.c ksmbd: remove unneeded mark_inode_dirty in set_info_sec() 2023-09-13 10:21:05 -05:00
smbacl.h
smbfsctl.h
smbstatus.h
transport_ipc.c ksmbd: use kvzalloc instead of kvmalloc 2023-06-26 00:07:04 -05:00
transport_ipc.h
transport_rdma.c ksmbd: reduce descriptor size if remaining bytes is less than request size 2023-08-29 12:30:20 -05:00
transport_rdma.h
transport_tcp.c
transport_tcp.h
unicode.c fs/smb: Swing unicode common code from smb->NLS 2023-08-30 08:55:51 -05:00
unicode.h fs/smb: Swing unicode common code from smb->NLS 2023-08-30 08:55:51 -05:00
vfs_cache.c ksmbd: fix Null pointer dereferences in ksmbd_update_fstate() 2023-10-12 22:44:09 -05:00
vfs_cache.h ksmbd: fix race condition with fp 2023-10-04 20:21:48 -05:00
vfs.c ksmbd: fix recursive locking in vfs helpers 2023-10-22 19:06:27 -05:00
vfs.h ksmbd: add support for read compound 2023-08-29 12:30:19 -05:00
xattr.h