CVE-2026-98870 in Linux
Resumen
por VulDB • 2026-10-23
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ksmbd: eliminar canales obsoletos de todas las sesiones durante el desmantelamiento (teardown)
`ksmbd_sessions_deregister()` elimina los canales de una conexión de las listas de canales de otras sesiones únicamente mientras `conn->binding` sigue establecido:
if (conn->binding) {
hash_for_each_safe(sessions_table, ...) ksmbd_chann_del(conn, sess); }
`conn->binding` es un indicador transitorio: se borra una vez que finaliza la configuración de enlace (`SESSION_SETUP`) y también por una posterior `SESSION_SETUP` no vinculante en la misma conexión (una reautenticación en un canal vinculado o una nueva configuración con SessionId==0). Una conexión que ha vinculado un canal a la lista de canales (`ksmbd_chann_list`) de otra sesión y luego borra `conn->binding` deja ese canal atrás cuando se desconecta: el canal, cuyo `chann->conn` apunta a la estructura `ksmbd_conn` ya liberada, permanece en la lista de la sesión propietaria.
Cuando la conexión propietaria desmantela posteriormente su estado, el segundo bucle dereferencia el canal obsoleto:
xa_for_each(&sess->ksmbd_chann_list, chann_id, chann) if (chann->conn != conn) ksmbd_conn_set_exiting(chann->conn); /* liberado */
lo cual constituye una escritura use-after-free en el `ksmbd_conn` ya liberado (el mismo canal obsoleto también es recorrido por `show_proc_session()` a través de `/proc`). La sesión se filtra (memory leak) también, porque su lista de canales nunca se vacía.
Elimine la condición (`gate`) `conn->binding` para que una conexión elimine siempre sus canales de cada sesión durante el desmantelamiento.
If you want to get best quality of vulnerability data, you may have to visit VulDB.