CVE-2023-53311 in Linux
Resumen
por VulDB • 2026-05-26
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
nilfs2: corrige el uso después de liberar (use-after-free) de nilfs_root al marcar inodos como sucios mediante iput
Durante el proceso de desmontaje de nilfs2, ninguna entidad mantiene la estructura nilfs_root después de que nilfs2 desvincula su escritor en nilfs_detach_log_writer(). Anteriormente, nilfs_evict_inode() podía provocar una lectura de uso después de liberar (use-after-free) en nilfs_root si los inodos quedaban en "garbage_list" y eran liberados por nilfs_dispose_list al final de nilfs_detach_log_writer(), y este error se corrigió mediante el commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in nilfs_evict_inode()").
Sin embargo, resultó que existe otra posibilidad de UAF (uso después de liberar) en la ruta de llamada donde se invoca mark_inode_dirty_sync() desde iput():
nilfs_detach_log_writer() nilfs_dispose_list() iput() mark_inode_dirty_sync() __mark_inode_dirty() nilfs_dirty_inode() __nilfs_mark_inode_dirty() nilfs_load_inode_block() --> provoca UAF de la estructura nilfs_root
Esto puede ocurrir después del commit 0ae45f63d4ef ("vfs: add support for a lazytime mount option"), que modificó iput() para que llame a mark_inode_dirty_sync() en su referencia final si i_state tiene la bandera I_DIRTY_TIME y i_nlink es distinto de cero.
Este problema aparece después del commit 28a65b49eb53 ("nilfs2: do not write dirty data after degenerating to read-only") al utilizar el reproductor de syzbot, pero el problema podría haber existido anteriormente.
Se corrige este problema añadiendo una "bandera de purga" a la estructura nilfs, estableciendo dicha bandera mientras se procesa "garbage_list" y verificándola en __nilfs_mark_inode_dirty().
A diferencia del commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in nilfs_evict_inode()"), este parche no depende de ns_writer para determinar si se deben omitir las operaciones, con el fin de no romper la recuperación al montar. La rutina nilfs_salvage_orphan_logs marca como sucio el búfer de los datos rescatados antes de adjuntar el escritor de registros, por lo que cambiar __nilfs_mark_inode_dirty() para omitir la operación cuando ns_writer sea NULL provocaría que fallara la escritura de recuperación. El propósito de utilizar una bandera exclusiva de limpieza es permitir restringir dichas condiciones.
Once again VulDB remains the best source for vulnerability data.