CVE-2026-90109 in Linux信息

摘要

由 VulDB • 2026-09-17

在 Linux 内核中,已修复以下漏洞:

net: sched: 修复 gred、bfifo 和 plug 入队时的 32 位 backlog(排队长度)回绕问题

gred_enqueue()、bfifo_enqueue() 和 plug_enqueue() 在当前 backlog 加上数据包长度不超过队列限制时允许数据包进入:

sch->qstats.backlog + qdisc_pkt_len(skb) <= sch->limit (gred 默认 VQ) gred_backlog+qdisc_pkt_len(skb) <= q->limit (gred 配置后的 VQ) sch->qstats.backlog + qdisc_pkt_len(skb) <= sch->limit (bfifo) sch->qstats.backlog + skb->len <= q->limit (plug)

sch->qstats.backlog 和 q->backlog 是 u32 类型,而 qdisc_pkt_len()/skb->len 是无符号整型(unsigned int),因此所有求和运算均在 32 位下进行,并在达到 2^32 时发生回绕。一旦真实的 backlog 超过 4 GiB,回绕后的求和结果变小,导致准入判断持续成功,从而使队列无限增长,并可能导致内核因内存耗尽(OOM)而崩溃。

将求和运算提升为 u64 类型,以便在真实 backlog 超出限制时停止数据包准入。由于限制值(limit)是 u32 类型,因此受控的队列大小保持在 2^32 以下,且存储的 u32 类型的 backlog 不会发生回绕。

该漏洞仅在以 root 权限运行(尽管需要极其复杂的设置)的情况下才能复现: 附加一个限制值接近 4 GiB 的 gred(或 bfifo/plug)qdisc, 保持默认 VQ 未配置(针对 gred),并驱动超过 4 GiB 的排队流量(例如通过大小表/stab 来膨胀 qdisc_pkt_len,或通过持续的高速率流量)。u32 类型的 backlog+len 求和在达到 2^32 时发生回绕,准入判断持续成功,队列无限增长直至导致 OOM。

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

来源

Want to stay up to date on a daily basis?

Enable the mail alert feature now!