aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/ssh:/git@git.zx2c4.com
diff options
context:
space:
mode:
authorNamjae Jeon <linkinjeon@kernel.org>2026-04-20 12:15:30 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-04-27 07:30:16 -0600
commitb34fc42cfe922e551f7a27d3ac3bb016e41d7dd9 (patch)
tree1cd147ced1b63c30f889bd76766aa1da2b29c870 /include/net/ssh:/git@git.zx2c4.com
parentcrypto: krb5enc - fix async decrypt skipping hash verification (diff)
ksmbd: fix use-after-free in __ksmbd_close_fd() via durable scavenger
[ Upstream commit 235e32320a470fcd3998fb3774f2290a0eb302a1 ] When a durable file handle survives session disconnect (TCP close without SMB2_LOGOFF), session_fd_check() sets fp->conn = NULL to preserve the handle for later reconnection. However, it did not clean up the byte-range locks on fp->lock_list. Later, when the durable scavenger thread times out and calls __ksmbd_close_fd(NULL, fp), the lock cleanup loop did: spin_lock(&fp->conn->llist_lock); This caused a slab use-after-free because fp->conn was NULL and the original connection object had already been freed by ksmbd_tcp_disconnect(). The root cause is asymmetric cleanup: lock entries (smb_lock->clist) were left dangling on the freed conn->lock_list while fp->conn was nulled out. To fix this issue properly, we need to handle the lifetime of smb_lock->clist across three paths: - Safely skip clist deletion when list is empty and fp->conn is NULL. - Remove the lock from the old connection's lock_list in session_fd_check() - Re-add the lock to the new connection's lock_list in ksmbd_reopen_durable_fd(). Fixes: c8efcc786146 ("ksmbd: add support for durable handles v1/v2") Co-developed-by: munan Huang <munanevil@gmail.com> Signed-off-by: munan Huang <munanevil@gmail.com> Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn> Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com> Stable-dep-of: 49110a8ce654 ("ksmbd: validate owner of durable handle on reconnect") Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/net/ssh:/git@git.zx2c4.com')
0 files changed, 0 insertions, 0 deletions