<?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 07:29:23 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-74284 — net/sched: sch_hfsc: Don't make class passive twice</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-74284</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: sch_hfsc: Don&amp;#39;t make class passive twice&lt;/p&gt;
&lt;p&gt;update_vf() is called from two places for the same class during a single
dequeue when the class&amp;#39;s child qdisc (e.g. codel/fq_codel) drops its last
packets while dequeuing:&lt;/p&gt;
&lt;p&gt;1. The child calls qdisc_tree_reduce_backlog(), which, now that the child
   is empty, invokes hfsc_qlen_notify() -&amp;gt; update_vf(cl, 0, 0) and turns
   the class passive (cl_nactive is decremented up the hierarchy).&lt;/p&gt;
&lt;p&gt;2. hfsc_dequeue() then calls update_vf(cl, qdisc_pkt_len(skb), cur_time)
   to charge the dequeued bytes.&lt;/p&gt;
&lt;p&gt;On the second call the class is already passive, but its child qdisc is
still empty, so update_vf() arms go_passive again:&lt;/p&gt;
&lt;p&gt;if (cl-&amp;gt;qdisc-&amp;gt;q.qlen == 0 &amp;amp;&amp;amp; cl-&amp;gt;cl_flags &amp;amp; HFSC_FSC)
              go_passive = 1;&lt;/p&gt;
&lt;p&gt;The leaf is then skipped by the cl_nactive == 0 check inside the loop,
which does not clear go_passive, so the stale go_passive propagates to the
parent and decrements its cl_nactive a second time. A parent that still
has other active children is driven to cl_nactive == 0 and removed from
the vttree, even though those siblings are still backlogged. They are
never dequeued again and the qdisc stalls.&lt;/p&gt;
&lt;p&gt;Fix this by only arming go_passive when the class is actually active, so an
already-passive class no longer triggers a second passive transition. The
byte accounting (cl-&amp;gt;cl_total += len) still runs for every ancestor, so
dequeued bytes continue to be counted ex…&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: sch_hfsc: Don&amp;#39;t make class passive twice&lt;/p&gt;
&lt;p&gt;update_vf() is called from two places for the same class during a single
dequeue when the class&amp;#39;s child qdisc (e.g. codel/fq_codel) drops its last
packets while dequeuing:&lt;/p&gt;
&lt;p&gt;1. The child calls qdisc_tree_reduce_backlog(), which, now that the child
   is empty, invokes hfsc_qlen_notify() -&amp;gt; update_vf(cl, 0, 0) and turns
   the class passive (cl_nactive is decremented up the hierarchy).&lt;/p&gt;
&lt;p&gt;2. hfsc_dequeue() then calls update_vf(cl, qdisc_pkt_len(skb), cur_time)
   to charge the dequeued bytes.&lt;/p&gt;
&lt;p&gt;On the second call the class is already passive, but its child qdisc is
still empty, so update_vf() arms go_passive again:&lt;/p&gt;
&lt;p&gt;if (cl-&amp;gt;qdisc-&amp;gt;q.qlen == 0 &amp;amp;&amp;amp; cl-&amp;gt;cl_flags &amp;amp; HFSC_FSC)
              go_passive = 1;&lt;/p&gt;
&lt;p&gt;The leaf is then skipped by the cl_nactive == 0 check inside the loop,
which does not clear go_passive, so the stale go_passive propagates to the
parent and decrements its cl_nactive a second time. A parent that still
has other active children is driven to cl_nactive == 0 and removed from
the vttree, even though those siblings are still backlogged. They are
never dequeued again and the qdisc stalls.&lt;/p&gt;
&lt;p&gt;Fix this by only arming go_passive when the class is actually active, so an
already-passive class no longer triggers a second passive transition. The
byte accounting (cl-&amp;gt;cl_total += len) still runs for every ancestor, so
dequeued bytes continue to be counted ex…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-74284</guid>
    </item>
  </channel>
</rss>
