Vulnerabilidad en Linux (CVE-2025-68774)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
13/01/2026
Última modificación:
15/04/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
hfsplus: corrige la falta de hfs_bnode_get() en __hfs_bnode_create<br />
<br />
Cuando sync() y link() se llaman concurrentemente, ambos hilos pueden entrar en hfs_bnode_find() sin encontrar el nodo en la tabla hash y proceder a crearlo.<br />
<br />
Hilo A:<br />
hfsplus_write_inode()<br />
-&gt; hfsplus_write_system_inode()<br />
-&gt; hfs_btree_write()<br />
-&gt; hfs_bnode_find(tree, 0)<br />
-&gt; __hfs_bnode_create(tree, 0)<br />
<br />
Hilo B:<br />
hfsplus_create_cat()<br />
-&gt; hfs_brec_insert()<br />
-&gt; hfs_bnode_split()<br />
-&gt; hfs_bmap_alloc()<br />
-&gt; hfs_bnode_find(tree, 0)<br />
-&gt; __hfs_bnode_create(tree, 0)<br />
<br />
En este caso, el hilo A crea el bnode, establece refcnt=1 y lo hashea. El hilo B también intenta crear el mismo bnode, nota que ya ha sido insertado, descarta su propia instancia y usa el hasheado sin obtener el nodo.<br />
<br />
```<br />
<br />
node2 = hfs_bnode_findhash(tree, cnid);<br />
if (!node2) { &lt;- Hilo A<br />
hash = hfs_bnode_hash(cnid);<br />
node-&gt;next_hash = tree-&gt;node_hash[hash];<br />
tree-&gt;node_hash[hash] = node;<br />
tree-&gt;node_hash_cnt++;<br />
} else { &lt;- Hilo B<br />
spin_unlock(&amp;tree-&gt;hash_lock);<br />
kfree(node);<br />
wait_event(node2-&gt;lock_wq,<br />
!test_bit(HFS_BNODE_NEW, &amp;node2-&gt;flags));<br />
return node2;<br />
}<br />
```<br />
<br />
Sin embargo, hfs_bnode_find() requiere que cada llamada tome una referencia. Aquí ambos hilos terminan estableciendo refcnt=1. Cuando más tarde liberan el nodo, esto dispara:<br />
<br />
BUG_ON(!atomic_read(&amp;node-&gt;refcnt))<br />
<br />
En este escenario, el Hilo B de hecho encuentra el nodo en la tabla hash en lugar de crear uno nuevo, y por lo tanto debe tomar una referencia.<br />
<br />
Solucione esto llamando a hfs_bnode_get() al reutilizar un bnode recién creado por otro hilo para asegurar que el contador de referencias se actualice correctamente.<br />
<br />
Un error similar fue corregido en HFS hace mucho tiempo en el commit a9dc087fd3c4 (&#39;corrige la falta de hfs_bnode_get() en __hfs_bnode_create&#39;) pero el mismo problema permaneció en HFS+ hasta ahora.
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/152af114287851583cf7e0abc10129941f19466a
- https://git.kernel.org/stable/c/39e149d58ef4d7883cbf87448d39d51292fd342d
- https://git.kernel.org/stable/c/3b0fc7af50b896d0f3d104e70787ba1973bc0b56
- https://git.kernel.org/stable/c/457f795e7abd7770de10216d7f9994a3f12a56d6
- https://git.kernel.org/stable/c/5882e7c8cdbb5e254a69628b780acff89c78071e
- https://git.kernel.org/stable/c/b68dc4134b18a3922cd33439ec614aad4172bc86
- https://git.kernel.org/stable/c/b9d1c6bb5f19460074ce9862cb80be86b5fb0a50



