Vulnerabilidad en Linux (CVE-2023-54253)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
30/12/2025
Última modificación:
15/04/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
btrfs: establecer la extensión de página mapeada después de read_folio en relocate_one_page<br />
<br />
Una de las ejecuciones de CI desencadenó el siguiente pánico<br />
<br />
aserción fallida: PagePrivate(page) &amp;&amp; page-&gt;private, en fs/btrfs/subpage.c:229<br />
------------[ cortar aquí ]------------<br />
BUG del kernel en fs/btrfs/subpage.c:229!<br />
Error interno: Oops - BUG: 00000000f2000800 [#1] SMP<br />
CPU: 0 PID: 923660 Comm: btrfs No contaminado 6.5.0-rc3+ #1<br />
pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)<br />
pc : btrfs_subpage_assert+0xbc/0xf0<br />
lr : btrfs_subpage_assert+0xbc/0xf0<br />
sp : ffff800093213720<br />
x29: ffff800093213720 x28: ffff8000932138b4 x27: 000000000c280000<br />
x26: 00000001b5d00000 x25: 000000000c281000 x24: 000000000c281fff<br />
x23: 0000000000001000 x22: 0000000000000000 x21: ffffff42b95bf880<br />
x20: ffff42b9528e0000 x19: 0000000000001000 x18: ffffffffffffffff<br />
x17: 667274622f736620 x16: 6e69202c65746176 x15: 0000000000000028<br />
x14: 0000000000000003 x13: 00000000002672d7 x12: 0000000000000000<br />
x11: ffffcd3f0ccd9204 x10: ffffcd3f0554ae50 x9 : ffffcd3f0379528c<br />
x8 : ffff800093213428 x7 : 0000000000000000 x6 : ffffcd3f091771e8<br />
x5 : ffff42b97f333948 x4 : 0000000000000000 x3 : 0000000000000000<br />
x2 : 0000000000000000 x1 : ffff42b9556cde80 x0 : 000000000000004f<br />
Traza de llamadas:<br />
btrfs_subpage_assert+0xbc/0xf0<br />
btrfs_subpage_set_dirty+0x38/0xa0<br />
btrfs_page_set_dirty+0x58/0x88<br />
relocate_one_page+0x204/0x5f0<br />
relocate_file_extent_cluster+0x11c/0x180<br />
relocate_data_extent+0xd0/0xf8<br />
relocate_block_group+0x3d0/0x4e8<br />
btrfs_relocate_block_group+0x2d8/0x490<br />
btrfs_relocate_chunk+0x54/0x1a8<br />
btrfs_balance+0x7f4/0x1150<br />
btrfs_ioctl+0x10f0/0x20b8<br />
__arm64_sys_ioctl+0x120/0x11d8<br />
invoke_syscall.constprop.0+0x80/0xd8<br />
do_el0_svc+0x6c/0x158<br />
el0_svc+0x50/0x1b0<br />
el0t_64_sync_handler+0x120/0x130<br />
el0t_64_sync+0x194/0x198<br />
Código: 91098021 b0007fa0 91346000 97e9c6d2 (d4210000)<br />
<br />
Este es el mismo problema descrito en 17b17fcd6d44 ("btrfs: establecer la extensión de página mapeada después de read_folio en btrfs_cont_expand"), y la solución es la misma. Originalmente busqué el mismo patrón en otra parte de nuestro código, pero erróneamente omití este código porque vi la lectura anticipada de la caché de páginas antes de set_page_extent_mapped, sin darme cuenta de que esto era solo en el caso de !page, que aún podemos terminar con una página !uptodate y luego hacer el btrfs_read_folio más abajo.<br />
<br />
La solución aquí es la misma que el parche mencionado anteriormente, mover la llamada a set_page_extent_mapped a después del bloque btrfs_read_folio() para asegurarnos de que tenemos la configuración de los elementos de tamaño de bloque de subpágina correctamente antes de usar la página.



