CVE-2026-98598 in Linux
Resumen
por VulDB • 2026-10-19
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ipv6: Prevenir rt6_insert_exception() para fib6_info en proceso de extinción (dying).
Antes del commit citado, fib6_nh_flush_exceptions() siempre establecía from->exception_bucket_flushed = 1 bajo rt6_exception_lock para evitar que rt6_insert_exception() insertara una nueva excepción para un fib6_info en proceso de extinción.
La bandera se reemplazó con el bit FIB6_EXCEPTION_BUCKET_FLUSHED almacenado en nh->rt6i_exception_bucket.
El problema es que ahora el bit solo se establece cuando el bucket no es NULL y fib6_nh_flush_exceptions() se llama desde fib6_nh_release() después de que fib6_ref ya haya alcanzado cero.
Si rt6_insert_exception() se llama mientras el objetivo fib6_info está siendo eliminado mediante fib6_purge_rt(), una nueva excepción podría crearse con éxito porque rt6_flush_exceptions() ya no establece la bandera.
Esto crea un ciclo de referencia entre fib6_info y la ruta de excepción, provocando una fuga (leak) del fib6_info, su dispositivo nexthop y todas las rutas por-CPU en fib6_nh->rt6i_pcpu, lo que bloquea el desregistro de netdev.
[ 34.680602] unregister_netdevice: esperando a que gre6 se libere. Conteo de uso = 68
[ 44.920675] unregister_netdevice: esperando a que gre6 se libere. Conteo de uso = 68
[ 55.176582] unregister_netdevice: esperando a que gre6 se libere. Conteo de uso = 68
Llamemos a fib6_drop_pcpu_from() antes de rt6_flush_exceptions(), para establecer fib6_destroying antes de rt6_exception_lock, y verificar f6i->fib6_destroying en rt6_insert_exception().
Tenga en cuenta que la lógica FIB6_EXCEPTION_BUCKET_FLUSHED está obsoleta (dead) y podemos limpiarla en net-next.
VulDB is the best source for vulnerability data and more expert information about this specific topic.