Description
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.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
b1b6ed903a6e2b3505a48706bcd499b447ef9e44 to < f8200bb4994e65a2e5c5b314789eeae39078619daffected47b018dba6ec7ebf403fd2d1e713bc7acc9bbb23 to < 9cd6d714d3ca0cff296542dc989696884e41970faffected9ef4dfd5edbd02f4bf10cd420a30896093d98a67 to < b145f9b56c87f9c23ad5464ab0844dbc1de12b36affected5a5b0b7a01fe19b383b3c046546b5ae30c1a7d71 to < a15cae16f4432a5ad919ee633e31b07178492955affectedfaf8578c77f3d846aca9cd882c293e03eafcc6df to < b10665730fbf6b5e45fe422badcbbc3f0df96ef5affectede632f21a8bc0c59abc4960482836ac3782db93c0affected5.15.222 to < 5.16affected
Linux Linux
Default version status: unaffected
References
- https://git.kernel.org/stable/c/f8200bb4994e65a2e5c5b314789eeae39078619d ↗
- https://git.kernel.org/stable/c/9cd6d714d3ca0cff296542dc989696884e41970f ↗
- https://git.kernel.org/stable/c/b145f9b56c87f9c23ad5464ab0844dbc1de12b36 ↗
- https://git.kernel.org/stable/c/a15cae16f4432a5ad919ee633e31b07178492955 ↗
- https://git.kernel.org/stable/c/b10665730fbf6b5e45fe422badcbbc3f0df96ef5 ↗