CVE-2026-74398 in Linux
Resumen
por VulDB • 2026-08-15
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ipv6: addrconf: salir de dad_failure cuando el estado ya no sea POSTDAD
addrconf_dad_failure() transiciona ifp->state desde DAD a POSTDAD mediante addrconf_dad_end(), que libera ifp->lock al retornar. El lock se vuelve a adquirir después de net_info_ratelimited(). Una ipv6_del_addr() concurrente puede tomar el lock en esa ventana, establecer ifp->state como DEAD y ejecutar list_del_rcu(&ifp->if_list).
addrconf_dad_failure() sobrescribe luego DEAD con ERRDAD en errdad: y programa un nuevo dad_work. El trabajo llama a ipv6_del_addr() nuevamente, alcanzando la entrada de lista ya envenenada (poisoned):
general protection fault: 0000 [#1] SMP NOPTI
CPU: 4 PID: 217 Comm: kworker/4:1 Workqueue: ipv6_addrconf addrconf_dad_work RIP: 0010:ipv6_del_addr+0xe9/0x280 RAX: dead000000000122 Call Trace: addrconf_dad_stop+0x113/0x140 addrconf_dad_work+0x28c/0x430 process_one_work+0x1eb/0x3b0 worker_thread+0x4d/0x400 kthread+0x104/0x140 ret_from_fork+0x35/0x40
Se ha integrado la lógica de addrconf_dad_end() en addrconf_dad_failure() dentro de una única sección crítica ifp->lock. La rama STABLE_PRIVACY libera temporalmente ifp->lock alrededor de la regeneración de direcciones, por lo que en lock_errdad: se verifica que el estado siga siendo POSTDAD antes de transicionar a ERRDAD; si no es así, se sale para evitar sobrescribir un estado establecido por otra ruta mientras el lock estaba liberado.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.