CVE-2026-23340 in Linuxinformación

Resumen

por MITRE • 2026-03-25

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

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

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.

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->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.

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:

iperf3 -ub0 -c $peer -t 0 &
while :; do
ethtool -L eth0 combined 1
ethtool -L eth0 combined 2
done

Con KASAN habilitado, esto lleva a informes como:

BUG: KASAN: uso después de liberación de slab en __qdisc_run+0x133f/0x1760
...
Rastro de Llamada:

...
__qdisc_run+0x133f/0x1760
__dev_queue_xmit+0x248f/0x3550
ip_finish_output2+0xa42/0x2110
ip_output+0x1a7/0x410
ip_send_skb+0x2e6/0x480
udp_send_skb+0xb0a/0x1590
udp_sendmsg+0x13c9/0x1fc0
...


Asignado por la tarea 1270 en la cpu 5 a los 44.558414s:
...
alloc_skb_with_frags+0x84/0x7c0
sock_alloc_send_pskb+0x69a/0x830
__ip_append_data+0x1b86/0x48c0
ip_make_skb+0x1e8/0x2b0
udp_sendmsg+0x13a6/0x1fc0
...

Liberado por la tarea 1306 en la cpu 3 a los 44.558445s:
...
kmem_cache_free+0x117/0x5e0
pfifo_fast_reset+0x14d/0x580
qdisc_reset+0x9e/0x5f0
netif_set_real_num_tx_queues+0x303/0x840
virtnet_set_channels+0x1bf/0x260 [virtio_net]
ethnl_set_channels+0x684/0xae0
ethnl_default_set_doit+0x31a/0x890
...

Serializar qdisc_reset_all_tx_gt() contra la ruta de eliminación de la cola sin bloqueo tomando qdisc->seqlock para los qdiscs TCQ_F_NOLOCK, coincidiendo con el modelo de serialización ya utilizado por dev_reset_queue().

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.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsable

Linux

Reservar

2026-01-13

Divulgación

2026-03-25

Moderación

aceptado

Artículo

VDB-353016

CPE

listo

EPSS

0.00137

KEV

no

Actividades

muy bajo

Fuentes

Do you know our Splunk app?

Download it now for free!