<?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>Wed, 30 Sep 2026 03:55:35 +0000</lastBuildDate>
    <item>
      <title>CVE-2025-40214 — af_unix: Initialise scc_index in unix_add_edge().</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2025-40214</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, Siemens RUGGEDCOM RST2428P&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;af_unix: Initialise scc_index in unix_add_edge().&lt;/p&gt;
&lt;p&gt;Quang Le reported that the AF_UNIX GC could garbage-collect a
receive queue of an alive in-flight socket, with a nice repro.&lt;/p&gt;
&lt;p&gt;The repro consists of three stages.&lt;/p&gt;
&lt;p&gt;1)
    1-a. Create a single cyclic reference with many sockets
    1-b. close() all sockets
    1-c. Trigger GC&lt;/p&gt;
&lt;p&gt;2)
    2-a. Pass sk-A to an embryo sk-B
    2-b. Pass sk-X to sk-X
    2-c. Trigger GC&lt;/p&gt;
&lt;p&gt;3)
    3-a. accept() the embryo sk-B
    3-b. Pass sk-B to sk-C
    3-c. close() the in-flight sk-A
    3-d. Trigger GC&lt;/p&gt;
&lt;p&gt;As of 2-c, sk-A and sk-X are linked to unix_unvisited_vertices,
and unix_walk_scc() groups them into two different SCCs:&lt;/p&gt;
&lt;p&gt;unix_sk(sk-A)-&amp;gt;vertex-&amp;gt;scc_index = 2 (UNIX_VERTEX_INDEX_START)
  unix_sk(sk-X)-&amp;gt;vertex-&amp;gt;scc_index = 3&lt;/p&gt;
&lt;p&gt;Once GC completes, unix_graph_grouped is set to true.
Also, unix_graph_maybe_cyclic is set to true due to sk-X&amp;#39;s
cyclic self-reference, which makes close() trigger GC.&lt;/p&gt;
&lt;p&gt;At 3-b, unix_add_edge() allocates unix_sk(sk-B)-&amp;gt;vertex and
links it to unix_unvisited_vertices.&lt;/p&gt;
&lt;p&gt;unix_update_graph() is called at 3-a. and 3-b., but neither
unix_graph_grouped nor unix_graph_maybe_cyclic is changed
because both sk-B&amp;#39;s listener and sk-C are not in-flight.&lt;/p&gt;
&lt;p&gt;3-c decrements sk-A&amp;#39;s file refcnt to 1.&lt;/p&gt;
&lt;p&gt;Since unix_graph_grouped is true at 3-d, unix_walk_scc_fast()
is finally called and iterates 3 sockets sk-A, sk-B, and sk-X:&lt;/p&gt;
&lt;p&gt;sk-A -&amp;gt; sk-B (-&amp;gt; sk-C)
  sk-X -&amp;gt; sk-X&lt;/p&gt;
&lt;p&gt;This is to…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, Siemens RUGGEDCOM RST2428P&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;af_unix: Initialise scc_index in unix_add_edge().&lt;/p&gt;
&lt;p&gt;Quang Le reported that the AF_UNIX GC could garbage-collect a
receive queue of an alive in-flight socket, with a nice repro.&lt;/p&gt;
&lt;p&gt;The repro consists of three stages.&lt;/p&gt;
&lt;p&gt;1)
    1-a. Create a single cyclic reference with many sockets
    1-b. close() all sockets
    1-c. Trigger GC&lt;/p&gt;
&lt;p&gt;2)
    2-a. Pass sk-A to an embryo sk-B
    2-b. Pass sk-X to sk-X
    2-c. Trigger GC&lt;/p&gt;
&lt;p&gt;3)
    3-a. accept() the embryo sk-B
    3-b. Pass sk-B to sk-C
    3-c. close() the in-flight sk-A
    3-d. Trigger GC&lt;/p&gt;
&lt;p&gt;As of 2-c, sk-A and sk-X are linked to unix_unvisited_vertices,
and unix_walk_scc() groups them into two different SCCs:&lt;/p&gt;
&lt;p&gt;unix_sk(sk-A)-&amp;gt;vertex-&amp;gt;scc_index = 2 (UNIX_VERTEX_INDEX_START)
  unix_sk(sk-X)-&amp;gt;vertex-&amp;gt;scc_index = 3&lt;/p&gt;
&lt;p&gt;Once GC completes, unix_graph_grouped is set to true.
Also, unix_graph_maybe_cyclic is set to true due to sk-X&amp;#39;s
cyclic self-reference, which makes close() trigger GC.&lt;/p&gt;
&lt;p&gt;At 3-b, unix_add_edge() allocates unix_sk(sk-B)-&amp;gt;vertex and
links it to unix_unvisited_vertices.&lt;/p&gt;
&lt;p&gt;unix_update_graph() is called at 3-a. and 3-b., but neither
unix_graph_grouped nor unix_graph_maybe_cyclic is changed
because both sk-B&amp;#39;s listener and sk-C are not in-flight.&lt;/p&gt;
&lt;p&gt;3-c decrements sk-A&amp;#39;s file refcnt to 1.&lt;/p&gt;
&lt;p&gt;Since unix_graph_grouped is true at 3-d, unix_walk_scc_fast()
is finally called and iterates 3 sockets sk-A, sk-B, and sk-X:&lt;/p&gt;
&lt;p&gt;sk-A -&amp;gt; sk-B (-&amp;gt; sk-C)
  sk-X -&amp;gt; sk-X&lt;/p&gt;
&lt;p&gt;This is to…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2025-40214</guid>
    </item>
  </channel>
</rss>
