CVE-2026-99117 in Linux
Resumen
por VulDB • 2026-10-28
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
net: bridge: mcast: no truncar el recorrido del grupo de puertos durante el desmantelamiento (teardown)
__br_multicast_disable_port_ctx() y br_multicast_del_port() recorren port->mglist con hlist_for_each_entry_safe(). Sin embargo, br_multicast_find_del_pg() también puede eliminar otras entradas de la misma lista a través de br_multicast_fwd_src_remove() o __fwd_del_star_excl().
Si dicha entrada es el siguiente nodo guardado por el iterador, hlist_del_init() borra su ->next y termina el recorrido prematuramente. El programa reproductor (reproducer) activa esto en ambos recorridos de desmantelamiento, dejando grupos de puertos en la mdb del puente con un puntero colgante ->key.port después de que del_nbp() libere el puerto:
BUG: KASAN: slab-use-after-free in __mdb_fill_info+0x1191/0x1320 __mdb_fill_info+0x1191/0x1320 br_mdb_dump+0x594/0xe40 rtnl_mdb_dump+0x1cf/0x5d0
Utilice hlist_del_init_rcu() para desvincular el grupo mientras se preserva ->next. br_multicast_del_pg() y los recorridos de desmantelamiento se ejecutan bajo br->multicast_lock. El trabajador del GC (Garbage Collector) debe adquirir el mismo bloqueo antes de desconectar el grupo para su destrucción, por lo que el nodo permanece vivo mientras el recorrido utiliza el puntero preservado.
Preservar ->next significa que un recorrido ahora puede alcanzar a un grupo que una iteración anterior ya eliminó como efecto secundario. Dicho grupo está fuera de mp->ports, por lo que br_multicast_find_del_pg() pasaría su escaneo de puertos y encontraría el WARN_ON(1) final. Omita estos grupos en la parte superior de esa función auxiliar: un grupo de puertos se coloca en port->mglist cuando se crea y solo se desvincula cuando se elimina, por lo que hlist_unhashed() identifica exactamente este caso.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.