<?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 01:09:05 +0000</lastBuildDate>
    <item>
      <title>CVE-2025-68774 — hfsplus: fix missing hfs_bnode_get() in __hfs_bnode_create</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2025-68774</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;hfsplus: fix missing hfs_bnode_get() in __hfs_bnode_create&lt;/p&gt;
&lt;p&gt;When sync() and link() are called concurrently, both threads may
enter hfs_bnode_find() without finding the node in the hash table
and proceed to create it.&lt;/p&gt;
&lt;p&gt;Thread A:
  hfsplus_write_inode()
    -&amp;gt; hfsplus_write_system_inode()
      -&amp;gt; hfs_btree_write()
        -&amp;gt; hfs_bnode_find(tree, 0)
          -&amp;gt; __hfs_bnode_create(tree, 0)&lt;/p&gt;
&lt;p&gt;Thread B:
  hfsplus_create_cat()
    -&amp;gt; hfs_brec_insert()
      -&amp;gt; hfs_bnode_split()
        -&amp;gt; hfs_bmap_alloc()
          -&amp;gt; hfs_bnode_find(tree, 0)
            -&amp;gt; __hfs_bnode_create(tree, 0)&lt;/p&gt;
&lt;p&gt;In this case, thread A creates the bnode, sets refcnt=1, and hashes it.
Thread B also tries to create the same bnode, notices it has already
been inserted, drops its own instance, and uses the hashed one without
getting the node.&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;node2 = hfs_bnode_findhash(tree, cnid);
	if (!node2) {                                 &amp;lt;- Thread A
		hash = hfs_bnode_hash(cnid);
		node-&amp;gt;next_hash = tree-&amp;gt;node_hash[hash];
		tree-&amp;gt;node_hash[hash] = node;
		tree-&amp;gt;node_hash_cnt++;
	} else {                                      &amp;lt;- Thread B
		spin_unlock(&amp;amp;tree-&amp;gt;hash_lock);
		kfree(node);
		wait_event(node2-&amp;gt;lock_wq,
			!test_bit(HFS_BNODE_NEW, &amp;amp;node2-&amp;gt;flags));
		return node2;
	}
```&lt;/p&gt;
&lt;p&gt;However, hfs_bnode_find() requires each call to take a reference.
Here both threads end up setting refcnt=1. When they later put the node,
this triggers:&lt;/p&gt;
&lt;p&gt;BUG_ON(!atomic_re…&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;hfsplus: fix missing hfs_bnode_get() in __hfs_bnode_create&lt;/p&gt;
&lt;p&gt;When sync() and link() are called concurrently, both threads may
enter hfs_bnode_find() without finding the node in the hash table
and proceed to create it.&lt;/p&gt;
&lt;p&gt;Thread A:
  hfsplus_write_inode()
    -&amp;gt; hfsplus_write_system_inode()
      -&amp;gt; hfs_btree_write()
        -&amp;gt; hfs_bnode_find(tree, 0)
          -&amp;gt; __hfs_bnode_create(tree, 0)&lt;/p&gt;
&lt;p&gt;Thread B:
  hfsplus_create_cat()
    -&amp;gt; hfs_brec_insert()
      -&amp;gt; hfs_bnode_split()
        -&amp;gt; hfs_bmap_alloc()
          -&amp;gt; hfs_bnode_find(tree, 0)
            -&amp;gt; __hfs_bnode_create(tree, 0)&lt;/p&gt;
&lt;p&gt;In this case, thread A creates the bnode, sets refcnt=1, and hashes it.
Thread B also tries to create the same bnode, notices it has already
been inserted, drops its own instance, and uses the hashed one without
getting the node.&lt;/p&gt;
&lt;p&gt;```&lt;/p&gt;
&lt;p&gt;node2 = hfs_bnode_findhash(tree, cnid);
	if (!node2) {                                 &amp;lt;- Thread A
		hash = hfs_bnode_hash(cnid);
		node-&amp;gt;next_hash = tree-&amp;gt;node_hash[hash];
		tree-&amp;gt;node_hash[hash] = node;
		tree-&amp;gt;node_hash_cnt++;
	} else {                                      &amp;lt;- Thread B
		spin_unlock(&amp;amp;tree-&amp;gt;hash_lock);
		kfree(node);
		wait_event(node2-&amp;gt;lock_wq,
			!test_bit(HFS_BNODE_NEW, &amp;amp;node2-&amp;gt;flags));
		return node2;
	}
```&lt;/p&gt;
&lt;p&gt;However, hfs_bnode_find() requires each call to take a reference.
Here both threads end up setting refcnt=1. When they later put the node,
this triggers:&lt;/p&gt;
&lt;p&gt;BUG_ON(!atomic_re…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2025-68774</guid>
    </item>
  </channel>
</rss>
