Live › vulnerability › CVE-2026-98870
Go to dashboardThe ksmbd in-kernel SMB server leaves a disconnected connection's channel on another session's channel list, so teardown writes into freed memory. The sources describe a use-after-free write and a leaked session, which can lead to memory corruption or a crash on a host running ksmbd.
Summary written from the sources below. Check the originals before acting.
First seen by InfraStack 2026-10-23 21:57 UTC. All times on this page are UTC.
Only systems running the ksmbd in-kernel SMB server are described as affected, specifically those where clients bind extra SMB channels to sessions and then reauthenticate or reset on the same connection. Hosts that use Samba in userspace or do not run ksmbd can skip it.
No product ranges from the sources yet.
lsmod | grep ksmbd or systemctl status ksmbduname -rrmmod ksmbd if SMB serving is not neededEach row is the first time that source carried this signal. The analyst’s rows are its own findings.
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: remove stale channels from all sessions on teardown
ksmbd_sessions_deregister() removes a connection's channels from other sessions' channel lists only while conn->binding is still set:
if (conn->binding) {
hash_for_each_safe(sessions_table, ...)
ksmbd_chann_del(conn, sess);
}
conn->binding is a transient flag: it is cleared once a binding SESSION_SETUP completes, and also by a subsequent non-binding SESSION_SETUP on the same connection (a reauthentication on a bound channel, or a new SessionId==0 setup). A connection that has bound a channel into another session's ksmbd_chann_list and then clears conn->binding leaves that channel behind when it disconnects: the channel, whose chann->conn points at the now freed struct ksmbd_conn, stays on the owner session's list.
When the owning connection later tears down, the second loop dereferences the stale channel:
xa_for_each(&sess->ksmbd_chann_list, chann_id, chann)
if (chann->conn != conn)
ksmbd_conn_set_exiting(chann->conn); /* freed */
which is a use-after-free write into the freed ksmbd_conn (the same stale channel is also walked by show_proc_session() through /proc). The session is leaked as well, because its channel list never empties.
Remove the conn->binding gate so a connection always removes its channels from every session on teardown.
This page as .md · .json · in your agent: get_signal("CVE-2026-98870")
NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.