Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en Linux (CVE-2026-23249)

Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
18/03/2026
Última modificación:
19/03/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() -&amp;gt;<br /> xfs_ioc_scrubv_metadata() -&amp;gt;<br /> xfs_scrub_metadata() -&amp;gt;<br /> &amp;#39;sc-&amp;gt;ops-&amp;gt;repair_eval(sc)&amp;#39; -&amp;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-&amp;gt;sm-&amp;gt;sm_type es XFS_SCRUB_TYPE_BNOPT ahora */<br /> xchk_allocbt() -&amp;gt;<br /> xchk_btree() -&amp;gt;<br /> &amp;#39;bs-&amp;gt;scrub_rec(bs, recp)&amp;#39; -&amp;gt;<br /> xchk_allocbt_rec() -&amp;gt;<br /> xchk_allocbt_xref() -&amp;gt;<br /> xchk_allocbt_xref_other()<br /> <br /> dado que sm_type es XFS_SCRUB_TYPE_BNOBT, pur se establece en &amp;amp;sc-&amp;gt;sa.cnt_cur. El kernel llamó a xfs_alloc_get_rec() y devolvió -EFSCORRUPTED. Cadena de llamadas:<br /> <br /> xfs_alloc_get_rec() -&amp;gt;<br /> xfs_btree_get_rec() -&amp;gt;<br /> xfs_btree_check_block() -&amp;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-&amp;gt;sa.cnt_cur) es anulado.<br /> <br /> Volviendo a xrep_revalidate_allocbt(), dado que sc-&amp;gt;sa.cnt_cur ha sido anulado, entonces activó una desreferencia de puntero nulo a través de xchk_allocbt() (segunda llamada) -&amp;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