CVE-2026-23340Linux内核网络调度器中存在一个安全漏洞,涉及在收缩实时传输队列数量时,qdisc_reset_all_tx_gt()与无锁队列disciplines的出队操作之间的竞态条件。由于无锁qdisc使用seqlock而非qdisc_lock进行序列化,导致qdisc_reset()可能与__qdisc_run()并发运行,从而在SKB仍被出队时释放它们,引发释放后重用(UAF)问题。该漏洞可通过在重流量下频繁更改队列数量来复现,可能导致本地权限提升或系统崩溃。
该漏洞源于Linux内核在处理网络队列重置逻辑时的同步机制缺陷。当调用netif_set_real_num_tx_queues()减少发送队列数量时,内核会调用qdisc_reset_all_tx_gt()来清理不再使用的队列。对于传统的有锁qdisc,该函数通过qdisc_lock()进行串行化。然而,对于标记为TCQ_F_NOLOCK的无锁qdisc,其出队路径由qdisc_run_begin/end()通过qdisc->seqlock保护。这种保护机制的不一致,导致qdisc_reset()可能与__qdisc_run()并发执行。攻击者可以通过在本地持续发送高流量网络包的同时,利用ethtool频繁切换网卡的多队列数量,触发上述竞态条件。这会导致数据包(SKB)结构体在出队过程中被提前释放,后续访问该内存时触发KASAN检测到的slab-use-after-free错误。