linux/fs/smb
NeilBrown 814cfdb635 smb/server: avoid deadlock when linking with ReplaceIfExists
[ Upstream commit d5fc1400a3 ]

If smb2_create_link() is called with ReplaceIfExists set and the name
does exist then a deadlock will happen.

ksmbd_vfs_kern_path_locked() will return with success and the parent
directory will be locked.  ksmbd_vfs_remove_file() will then remove the
file.  ksmbd_vfs_link() will then be called while the parent is still
locked.  It will try to lock the same parent and will deadlock.

This patch moves the ksmbd_vfs_kern_path_unlock() call to *before*
ksmbd_vfs_link() and then simplifies the code, removing the file_present
flag variable.

Signed-off-by: NeilBrown <neil@brown.name>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-08-20 18:30:19 +02:00
..
client smb: client: don't wait for info->send_pending == 0 on error 2025-08-20 18:30:16 +02:00
common smb: smbdirect: introduce smbdirect_socket_parameters 2025-07-06 11:01:42 +02:00
server smb/server: avoid deadlock when linking with ReplaceIfExists 2025-08-20 18:30:19 +02:00
Kconfig smb: move client and server files to common directory fs/smb 2023-05-24 16:29:21 -05:00
Makefile smb: move client and server files to common directory fs/smb 2023-05-24 16:29:21 -05:00