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.
| Software | From | Fixed in |
|---|---|---|
| linux / linux_kernel | 5.15 | 5.15.190 |
| linux / linux_kernel | 5.16 | 6.1.149 |
| linux / linux_kernel | 6.2 | 6.6.103 |
| linux / linux_kernel | 6.7 | 6.12.43 |
| linux / linux_kernel | 6.13 | 6.15.11 |
| linux / linux_kernel | 6.16 | 6.16.2 |
| debian / debian_linux | 11.0 | 11.0.x |