<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 29 Sep 2026 18:05:11 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-90109 — net: sched: fix 32-bit backlog wrap in gred, bfifo and plug enqueue</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-90109</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;net: sched: fix 32-bit backlog wrap in gred, bfifo and plug enqueue&lt;/p&gt;
&lt;p&gt;gred_enqueue(), bfifo_enqueue() and plug_enqueue() admit a packet when the
current backlog plus the packet length fits within the queue limit:&lt;/p&gt;
&lt;p&gt;sch-&amp;gt;qstats.backlog + qdisc_pkt_len(skb) &amp;lt;= sch-&amp;gt;limit (gred default VQ)
  gred_backlog+qdisc_pkt_len(skb) &amp;lt;= q-&amp;gt;limit  (gred configured VQ)
  sch-&amp;gt;qstats.backlog + qdisc_pkt_len(skb) &amp;lt;= sch-&amp;gt;limit (bfifo)
  sch-&amp;gt;qstats.backlog + skb-&amp;gt;len &amp;lt;= q-&amp;gt;limit             (plug)&lt;/p&gt;
&lt;p&gt;sch-&amp;gt;qstats.backlog and q-&amp;gt;backlog are u32, and qdisc_pkt_len()/skb-&amp;gt;len
are unsigned int, so all sums are computed in 32 bits and wrap at 2^32.
Once the true backlog exceeds 4 GiB the wrapped sum becomes small and
admission keeps succeeding, so the queue grows without bound and the kernel
can be driven to OOM.&lt;/p&gt;
&lt;p&gt;Promote the sums to u64 so admission stops once the true backlog exceeds
the limit.  The limit is u32, so the bounded queue stays below 2^32 and
the stored u32 backlog never wraps.&lt;/p&gt;
&lt;p&gt;The bug can only be reproduced as root (albeit with ridiculous setup):
 attach a gred (or bfifo/plug) qdisc with a limit near 4 GiB,
 leaving the default VQ unconfigured (for gred), and drive &amp;gt;4 GiB of
 queued traffic (e.g. via a size table / stab to inflate qdisc_pkt_len,
 or sustained high-rate traffic). The u32 backlog+len sum wraps at 2^32,
 admission keeps succeeding, and the queue grows unboundedly to OOM.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;net: sched: fix 32-bit backlog wrap in gred, bfifo and plug enqueue&lt;/p&gt;
&lt;p&gt;gred_enqueue(), bfifo_enqueue() and plug_enqueue() admit a packet when the
current backlog plus the packet length fits within the queue limit:&lt;/p&gt;
&lt;p&gt;sch-&amp;gt;qstats.backlog + qdisc_pkt_len(skb) &amp;lt;= sch-&amp;gt;limit (gred default VQ)
  gred_backlog+qdisc_pkt_len(skb) &amp;lt;= q-&amp;gt;limit  (gred configured VQ)
  sch-&amp;gt;qstats.backlog + qdisc_pkt_len(skb) &amp;lt;= sch-&amp;gt;limit (bfifo)
  sch-&amp;gt;qstats.backlog + skb-&amp;gt;len &amp;lt;= q-&amp;gt;limit             (plug)&lt;/p&gt;
&lt;p&gt;sch-&amp;gt;qstats.backlog and q-&amp;gt;backlog are u32, and qdisc_pkt_len()/skb-&amp;gt;len
are unsigned int, so all sums are computed in 32 bits and wrap at 2^32.
Once the true backlog exceeds 4 GiB the wrapped sum becomes small and
admission keeps succeeding, so the queue grows without bound and the kernel
can be driven to OOM.&lt;/p&gt;
&lt;p&gt;Promote the sums to u64 so admission stops once the true backlog exceeds
the limit.  The limit is u32, so the bounded queue stays below 2^32 and
the stored u32 backlog never wraps.&lt;/p&gt;
&lt;p&gt;The bug can only be reproduced as root (albeit with ridiculous setup):
 attach a gred (or bfifo/plug) qdisc with a limit near 4 GiB,
 leaving the default VQ unconfigured (for gred), and drive &amp;gt;4 GiB of
 queued traffic (e.g. via a size table / stab to inflate qdisc_pkt_len,
 or sustained high-rate traffic). The u32 backlog+len sum wraps at 2^32,
 admission keeps succeeding, and the queue grows unboundedly to OOM.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-90109</guid>
    </item>
  </channel>
</rss>
