Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en Linux (CVE-2026-23340)

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-416 Utilización después de liberación
Fecha de publicación:
25/03/2026
Última modificación:
23/04/2026

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:<br /> <br /> net: sched: evitar la condición de carrera entre qdisc_reset_all_tx_gt() y la eliminación de la cola para qdiscs sin bloqueo<br /> <br /> Al reducir el número de colas de transmisión (tx) reales, netif_set_real_num_tx_queues() llama a qdisc_reset_all_tx_gt() para vaciar los qdiscs de las colas que ya no se utilizarán.<br /> <br /> Actualmente, qdisc_reset_all_tx_gt() serializa qdisc_reset() con qdisc_lock(). Sin embargo, para los qdiscs sin bloqueo, la ruta de eliminación de la cola se serializa mediante qdisc_run_begin/end() usando qdisc-&amp;gt;seqlock en su lugar, por lo que qdisc_reset() puede ejecutarse concurrentemente con __qdisc_run() y liberar skbs mientras aún se están eliminando de la cola, lo que lleva a un uso después de liberación.<br /> <br /> Esto se puede reproducir fácilmente, por ejemplo, en virtio-net, imponiendo un tráfico intenso mientras se cambia frecuentemente el número de pares de colas:<br /> <br /> iperf3 -ub0 -c $peer -t 0 &amp;amp;<br /> while :; do<br /> ethtool -L eth0 combined 1<br /> ethtool -L eth0 combined 2<br /> done<br /> <br /> Con KASAN habilitado, esto lleva a informes como:<br /> <br /> BUG: KASAN: uso después de liberación de slab en __qdisc_run+0x133f/0x1760<br /> ...<br /> Rastro de Llamada:<br /> <br /> ...<br /> __qdisc_run+0x133f/0x1760<br /> __dev_queue_xmit+0x248f/0x3550<br /> ip_finish_output2+0xa42/0x2110<br /> ip_output+0x1a7/0x410<br /> ip_send_skb+0x2e6/0x480<br /> udp_send_skb+0xb0a/0x1590<br /> udp_sendmsg+0x13c9/0x1fc0<br /> ...<br /> <br /> <br /> Asignado por la tarea 1270 en la cpu 5 a los 44.558414s:<br /> ...<br /> alloc_skb_with_frags+0x84/0x7c0<br /> sock_alloc_send_pskb+0x69a/0x830<br /> __ip_append_data+0x1b86/0x48c0<br /> ip_make_skb+0x1e8/0x2b0<br /> udp_sendmsg+0x13a6/0x1fc0<br /> ...<br /> <br /> Liberado por la tarea 1306 en la cpu 3 a los 44.558445s:<br /> ...<br /> kmem_cache_free+0x117/0x5e0<br /> pfifo_fast_reset+0x14d/0x580<br /> qdisc_reset+0x9e/0x5f0<br /> netif_set_real_num_tx_queues+0x303/0x840<br /> virtnet_set_channels+0x1bf/0x260 [virtio_net]<br /> ethnl_set_channels+0x684/0xae0<br /> ethnl_default_set_doit+0x31a/0x890<br /> ...<br /> <br /> Serializar qdisc_reset_all_tx_gt() contra la ruta de eliminación de la cola sin bloqueo tomando qdisc-&amp;gt;seqlock para los qdiscs TCQ_F_NOLOCK, coincidiendo con el modelo de serialización ya utilizado por dev_reset_queue().<br /> <br /> Además, borrar QDISC_STATE_NON_EMPTY después del reinicio para que el estado del qdisc refleje una cola vacía, evitando una reprogramación innecesaria.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.16.1 (incluyendo) 5.15.203 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (incluyendo) 6.1.167 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (incluyendo) 6.6.130 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (incluyendo) 6.12.77 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.13 (incluyendo) 6.18.17 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.19 (incluyendo) 6.19.7 (excluyendo)
cpe:2.3:o:linux:linux_kernel:4.16:-:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc7:*:*:*:*:*:*