CVE-2026-74284 in Linux
Resumen
por VulDB • 2026-08-15
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
net/sched: sch_hfsc: No hacer que una clase sea pasiva dos veces
update_vf() es llamado desde dos lugares para la misma clase durante un único dequeue cuando el qdisc hijo de la clase (por ejemplo, codel/fq_codel) desecha sus últimos paquetes mientras se realiza el dequeuing:
1. El hijo llama a qdisc_tree_reduce_backlog(), que, ahora que el hijo está vacío, invoca hfsc_qlen_notify() -> update_vf(cl, 0, 0) y hace que la clase sea pasiva (cl_nactive se decrementa hacia arriba en la jerarquía).
2. hfsc_dequeue() luego llama a update_vf(cl, qdisc_pkt_len(skb), cur_time) para cargar los bytes dequeados.
En la segunda llamada, la clase ya es pasiva, pero su qdisc hijo sigue estando vacío, por lo que las ramas de update_vf() activan go_passive nuevamente:
if (cl->qdisc->q.qlen == 0 && cl->cl_flags & HFSC_FSC) go_passive = 1;
La hoja es luego omitida por la comprobación cl_nactive == 0 dentro del bucle, lo cual no limpia go_passive, de modo que el valor obsoleto de go_passive se propaga al padre y decrementa su cl_nactive una segunda vez. Un padre que aún tiene otros hijos activos es llevado a cl_nactive == 0 y eliminado del vttree, aunque esos hermanos sigan teniendo cola pendiente (backlogged). Nunca son dequeados nuevamente y el qdisc se bloquea (stalls).
Se soluciona esto activando go_passive solo cuando la clase está realmente activa, de modo que una clase ya pasiva no active una segunda transición a pasivo. La contabilización de bytes (cl->cl_total += len) sigue ejecutándose para cada ancestro, por lo que los bytes dequeados continúan contándose exactamente una vez.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.