Vulnerabilidad en Linux (CVE-2026-23249)
Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476
Desreferencia a puntero nulo (NULL)
Fecha de publicación:
18/03/2026
Última modificación:
21/05/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
xfs: verificar cursores eliminados al revalidar dos btrees<br />
<br />
Las funciones de reparación de btree de espacio libre e inodo reconstruirán ambos btrees al mismo tiempo, después de lo cual necesita evaluar ambos btrees para confirmar que las corrupciones han desaparecido.<br />
<br />
Sin embargo, Jiaming Zhang ejecutó syzbot y produjo un fallo en la segunda llamada a xchk_allocbt. Su análisis de causa raíz es el siguiente (con correcciones menores):<br />
<br />
En xrep_revalidate_allocbt(), se llama a xchk_allocbt() dos veces (primero para BNOBT, segundo para CNTBT). La causa de este problema es que la primera llamada anuló el cursor requerido por la segunda llamada.<br />
<br />
Primero entremos en xrep_revalidate_allocbt() a través de la siguiente cadena de llamadas:<br />
<br />
xfs_file_ioctl() -&gt;<br />
xfs_ioc_scrubv_metadata() -&gt;<br />
xfs_scrub_metadata() -&gt;<br />
&#39;sc-&gt;ops-&gt;repair_eval(sc)&#39; -&gt;<br />
xrep_revalidate_allocbt()<br />
<br />
Se llama a xchk_allocbt() dos veces en esta función. En la primera llamada:<br />
<br />
/* Tenga en cuenta que sc-&gt;sm-&gt;sm_type es XFS_SCRUB_TYPE_BNOPT ahora */<br />
xchk_allocbt() -&gt;<br />
xchk_btree() -&gt;<br />
&#39;bs-&gt;scrub_rec(bs, recp)&#39; -&gt;<br />
xchk_allocbt_rec() -&gt;<br />
xchk_allocbt_xref() -&gt;<br />
xchk_allocbt_xref_other()<br />
<br />
dado que sm_type es XFS_SCRUB_TYPE_BNOBT, pur se establece en &amp;sc-&gt;sa.cnt_cur. El kernel llamó a xfs_alloc_get_rec() y devolvió -EFSCORRUPTED. Cadena de llamadas:<br />
<br />
xfs_alloc_get_rec() -&gt;<br />
xfs_btree_get_rec() -&gt;<br />
xfs_btree_check_block() -&gt;<br />
(XFS_IS_CORRUPT || XFS_TEST_ERROR), el primero es falso y el segundo es verdadero, devuelve -EFSCORRUPTED. Esto debería ser causado por ioctl$XFS_IOC_ERROR_INJECTION, supongo.<br />
<br />
Volviendo a xchk_allocbt_xref_other(), después de recibir -EFSCORRUPTED de xfs_alloc_get_rec(), el kernel llamó a xchk_should_check_xref(). En esta función, *curpp (que apunta a sc-&gt;sa.cnt_cur) es anulado.<br />
<br />
Volviendo a xrep_revalidate_allocbt(), dado que sc-&gt;sa.cnt_cur ha sido anulado, entonces activó una desreferencia de puntero nulo a través de xchk_allocbt() (segunda llamada) -&gt; xchk_btree().<br />
<br />
Así que. La revalidación de bnobt falló en un intento de referencia cruzada, por lo que eliminamos el cursor cntbt, y luego fallamos cuando intentamos revalidar el cntbt. Por lo tanto, verifique si hay un cursor cntbt nulo antes de esa revalidación, y marque la reparación como incompleta. También podemos ignorar el segundo árbol por completo si el primer árbol fue reconstruido pero ya está corrupto.<br />
<br />
Aplique la misma corrección a xrep_revalidate_iallocbt porque tiene el mismo problema.
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
| CPE | Desde | Hasta |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.8 (incluyendo) | 6.12.75 (excluyendo) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 (incluyendo) | 6.18.16 (excluyendo) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 (incluyendo) | 6.19.6 (excluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página



