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-&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;<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-&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.
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA
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:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/5bb27ad54d12de67e457d7d251198e361bef835e
- https://git.kernel.org/stable/c/5bc4e69306ed7ae02232eb4c0b23ed621a26d504
- https://git.kernel.org/stable/c/7594467c49bfc2f4644dee0415ac2290db11fa0d
- https://git.kernel.org/stable/c/7f083faf59d14c04e01ec05a7507f036c965acf8
- https://git.kernel.org/stable/c/8314944cc3bdeaa5a73e6f8a8cf0d94822e625cb
- https://git.kernel.org/stable/c/c69df4e0524f8de8e176ba389acd83e85f5f49d0
- https://git.kernel.org/stable/c/dbd58b0730aa06ab6ad26079cf9a5b6b58e7e750



