CVE-2026-98173 in Linux
Resumen
por VulDB • 2026-10-06
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
smb: cliente: corregir un use-after-free de iface en cifs_try_adding_channels()
cifs_try_adding_channels() itera sobre ses->iface_list mediante list_for_each_entry_safe_from(), lo que captura la entrada siguiente (niface) bajo iface_lock. El cuerpo del bucle luego libera iface_lock durante toda la duración de cifs_ses_add_channel().
Una actualización concurrente de interfaz (SMB3_request_interfaces() -> parse_server_interfaces()) marca todas las interfaces como inactivas y elimina y libera aquellas que no se vuelven a anunciar mediante list_del() + kref_put(), donde release_iface() es un simple kfree(). Dado que niface normalmente no tiene ningún canal que mantenga una referencia, la referencia de lista es su última y puede ser liberada dentro de la ventana sin bloqueo. Al continuar, el paso de avance del iterador desreferencia luego niface->iface_head.next, y el cuerpo del bucle lee iface->rdma_capable/is_active, ambos en memoria ya liberada.
Se corrige esto evitando mantener un puntero de lista no referenciado a través de la ventana sin bloqueo. Cada intento de canal ahora vuelve a escanear la lista desde el inicio bajo iface_lock, toma una kref sobre el candidato seleccionado y pasa solo ese candidato referenciado a cifs_ses_add_channel(). weight_fulfilled sigue rastreando el progreso de selección, por lo que reiniciar el escaneo preserva la distribución ponderada original y el ordenamiento weight_fulfilled-before-kref_put en la ruta de fallo.
Se añade un límite de intentos por pasada para evitar que una actualización inestable de interfaz mantenga el bucle interno girando dentro de un único incremento de tries.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.