Medium · published September 4, 2025
In the Linux kernel, the following vulnerability has been resolved:
smb/server: avoid deadlock when linking with ReplaceIfExists
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.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 5.15, < 5.15.190 | 5.15.190 |
| linux/linux_kernel | ≥ 5.16, < 6.1.149 | 6.1.149 |
| linux/linux_kernel | ≥ 6.2, < 6.6.103 | 6.6.103 |
| linux/linux_kernel | ≥ 6.7, < 6.12.43 | 6.12.43 |
| linux/linux_kernel | ≥ 6.13, < 6.15.11 | 6.15.11 |
| linux/linux_kernel | ≥ 6.16, < 6.16.2 | 6.16.2 |
| debian/debian_linux | all versions | — |