<?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 04:43:41 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-74609 — tipc: read le-&gt;link under the node lock in tipc_node_link_down()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-74609</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;tipc: read le-&amp;gt;link under the node lock in tipc_node_link_down()&lt;/p&gt;
&lt;p&gt;tipc_node_link_down() caches the link pointer before taking n-&amp;gt;lock:&lt;/p&gt;
&lt;p&gt;struct tipc_link *l = le-&amp;gt;link;		/* unlocked */&lt;/p&gt;
&lt;p&gt;if (!l)
		return;
	tipc_node_write_lock(n);
	if (!tipc_link_is_establishing(l)) {	/* deref l */
	...
		tipc_link_reset(l);		/* write into l */
	if (delete) {
		kfree(l);
		le-&amp;gt;link = NULL;&lt;/p&gt;
&lt;p&gt;The delete=true caller frees that very object under n-&amp;gt;lock, so the lock
does not protect the cached pointer against it:&lt;/p&gt;
&lt;p&gt;- CPU A, delete=false: tipc_rcv() on TIPC_LINK_DOWN_EVT, or the link
   supervision timer via tipc_node_timeout(), reads l unlocked and then
   dereferences it under n-&amp;gt;lock;
 - CPU B, delete=true: netlink TIPC_NL_BEARER_DISABLE -&amp;gt; bearer_disable()
   -&amp;gt; tipc_node_delete_links() -&amp;gt; tipc_node_link_down(n, bearer_id, true)
   -&amp;gt; kfree(l).&lt;/p&gt;
&lt;p&gt;The link is freed with plain kfree(), not kfree_rcu(), and for UDP bearers
disable_media() only schedules the asynchronous cleanup_bearer() work, so
its synchronize_net() runs after the links are already gone.  An in-flight
CPU A that has read l therefore dereferences freed memory once B frees it:
a use-after-free read in tipc_link_is_establishing(), and a use-after-free
write via tipc_link_reset() on the establishing branch.&lt;/p&gt;
&lt;p&gt;The following trace was captured on 7.2.0-rc5-00284-gaf39eb111ce6:&lt;/p&gt;
&lt;p&gt;BUG: KASAN: slab-use-after-free in tipc_link_is_establishing (net/tipc/link.c:285)
  Read…&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;tipc: read le-&amp;gt;link under the node lock in tipc_node_link_down()&lt;/p&gt;
&lt;p&gt;tipc_node_link_down() caches the link pointer before taking n-&amp;gt;lock:&lt;/p&gt;
&lt;p&gt;struct tipc_link *l = le-&amp;gt;link;		/* unlocked */&lt;/p&gt;
&lt;p&gt;if (!l)
		return;
	tipc_node_write_lock(n);
	if (!tipc_link_is_establishing(l)) {	/* deref l */
	...
		tipc_link_reset(l);		/* write into l */
	if (delete) {
		kfree(l);
		le-&amp;gt;link = NULL;&lt;/p&gt;
&lt;p&gt;The delete=true caller frees that very object under n-&amp;gt;lock, so the lock
does not protect the cached pointer against it:&lt;/p&gt;
&lt;p&gt;- CPU A, delete=false: tipc_rcv() on TIPC_LINK_DOWN_EVT, or the link
   supervision timer via tipc_node_timeout(), reads l unlocked and then
   dereferences it under n-&amp;gt;lock;
 - CPU B, delete=true: netlink TIPC_NL_BEARER_DISABLE -&amp;gt; bearer_disable()
   -&amp;gt; tipc_node_delete_links() -&amp;gt; tipc_node_link_down(n, bearer_id, true)
   -&amp;gt; kfree(l).&lt;/p&gt;
&lt;p&gt;The link is freed with plain kfree(), not kfree_rcu(), and for UDP bearers
disable_media() only schedules the asynchronous cleanup_bearer() work, so
its synchronize_net() runs after the links are already gone.  An in-flight
CPU A that has read l therefore dereferences freed memory once B frees it:
a use-after-free read in tipc_link_is_establishing(), and a use-after-free
write via tipc_link_reset() on the establishing branch.&lt;/p&gt;
&lt;p&gt;The following trace was captured on 7.2.0-rc5-00284-gaf39eb111ce6:&lt;/p&gt;
&lt;p&gt;BUG: KASAN: slab-use-after-free in tipc_link_is_establishing (net/tipc/link.c:285)
  Read…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-74609</guid>
    </item>
  </channel>
</rss>
