<?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>Thu, 01 Oct 2026 17:01:27 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-64459 — tcp: restore RCU grace period in tcp_ao_destroy_sock</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-64459</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;tcp: restore RCU grace period in tcp_ao_destroy_sock&lt;/p&gt;
&lt;p&gt;Commit 51e547e8c89c (&amp;#34;tcp: Free TCP-AO/TCP-MD5 info/keys without RCU&amp;#34;)
removed the call_rcu() callback from tcp_ao_destroy_sock(), arguing that
&amp;#34;the destruction of info/keys is delayed until the socket destructor&amp;#34;
and therefore &amp;#34;no one can discover it anymore&amp;#34;.&lt;/p&gt;
&lt;p&gt;That argument does not hold for the call site in tcp_connect()
(net/ipv4/tcp_output.c:4327-4332). At that point the socket is in
TCP_SYN_SENT, has already been inserted into the inet ehash by
inet_hash_connect() in tcp_v4_connect(), and is therefore very much
discoverable: any softirq running tcp_v4_rcv() on another CPU can take
the socket out of the ehash, walk into tcp_inbound_hash(), and load
tp-&amp;gt;ao_info via implicit RCU before bh_lock_sock_nested() is taken on
the destroying CPU.&lt;/p&gt;
&lt;p&gt;The reader path then enters __tcp_ao_do_lookup() (net/ipv4/tcp_ao.c:208)
which re-loads tp-&amp;gt;ao_info via rcu_dereference_check(); the re-load can
still observe the (about-to-be-freed) pointer because there is no
synchronize_rcu() between rcu_assign_pointer(tp-&amp;gt;ao_info, NULL) and
tcp_ao_info_free() in tcp_ao_destroy_sock(). The captured pointer is
then walked at line 223:&lt;/p&gt;
&lt;p&gt;hlist_for_each_entry_rcu(key, &amp;amp;ao-&amp;gt;head, node, ...)&lt;/p&gt;
&lt;p&gt;The writer&amp;#39;s synchronous kfree() is free to complete between the line
218 re-fetch and the line 223 hlist iteration. The slab is reused
(or simply LIST_POISON1-stamped if not yet reused) and the…&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;tcp: restore RCU grace period in tcp_ao_destroy_sock&lt;/p&gt;
&lt;p&gt;Commit 51e547e8c89c (&amp;#34;tcp: Free TCP-AO/TCP-MD5 info/keys without RCU&amp;#34;)
removed the call_rcu() callback from tcp_ao_destroy_sock(), arguing that
&amp;#34;the destruction of info/keys is delayed until the socket destructor&amp;#34;
and therefore &amp;#34;no one can discover it anymore&amp;#34;.&lt;/p&gt;
&lt;p&gt;That argument does not hold for the call site in tcp_connect()
(net/ipv4/tcp_output.c:4327-4332). At that point the socket is in
TCP_SYN_SENT, has already been inserted into the inet ehash by
inet_hash_connect() in tcp_v4_connect(), and is therefore very much
discoverable: any softirq running tcp_v4_rcv() on another CPU can take
the socket out of the ehash, walk into tcp_inbound_hash(), and load
tp-&amp;gt;ao_info via implicit RCU before bh_lock_sock_nested() is taken on
the destroying CPU.&lt;/p&gt;
&lt;p&gt;The reader path then enters __tcp_ao_do_lookup() (net/ipv4/tcp_ao.c:208)
which re-loads tp-&amp;gt;ao_info via rcu_dereference_check(); the re-load can
still observe the (about-to-be-freed) pointer because there is no
synchronize_rcu() between rcu_assign_pointer(tp-&amp;gt;ao_info, NULL) and
tcp_ao_info_free() in tcp_ao_destroy_sock(). The captured pointer is
then walked at line 223:&lt;/p&gt;
&lt;p&gt;hlist_for_each_entry_rcu(key, &amp;amp;ao-&amp;gt;head, node, ...)&lt;/p&gt;
&lt;p&gt;The writer&amp;#39;s synchronous kfree() is free to complete between the line
218 re-fetch and the line 223 hlist iteration. The slab is reused
(or simply LIST_POISON1-stamped if not yet reused) and the…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-64459</guid>
    </item>
  </channel>
</rss>
