CVE-2026-99180 in Linux
Resumen
por VulDB • 2026-10-28
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
unicode: liberar el mapa después de un período de gracia (grace period)
generic_ci_d_hash() y generic_ci_d_compare() leen sb->s_encoding y desreferencian el mapa unicode mientras una pathwalk en modo RCU solo mantiene rcu_read_lock(). Los sistemas de archivos que los utilizan, ext4, f2fs y tmpfs, liberan el mapa con utf8_unload() desde ->put_super(), lo cual se ejecuta cuando la última referencia al montaje (mount) desaparece. Una búsqueda que aún está dentro de dicho sistema de archivos en ese momento lee un mapa ya liberado.
Con una pathwalk retenida en utf8_casefold_hash() mientras la última referencia a un tmpfs con casefold desaparece:
BUG: KASAN: slab-use-after-free in utf8nlookup+0x74c/0x950 Read of size 8 at addr ff110001030fe658 by task walker/98 Call Trace: <TASK> utf8nlookup+0x74c/0x950 utf8byte+0x160/0x1560 utf8_casefold_hash+0x167/0x230 generic_ci_d_hash+0xdd/0x1c0 link_path_walk+0x11ad/0x1d30 path_lookupat+0x63/0xb00 filename_lookup+0x1f1/0x5b0 vfs_statx+0xd7/0x3b0 [...]
Allocated by task 94: __kmalloc_cache_noprof+0x249/0x560 utf8_load+0x4e/0x570 shmem_parse_opt_casefold.isra.0+0x92/0x270 [...]
Freed by task 97: kfree+0x1db/0x5b0 shmem_put_super+0x72/0x170 generic_shutdown_super+0x14c/0x530 kill_anon_super+0x3a/0x60 deactivate_locked_super+0x9c/0xf0 cleanup_mnt+0x9f/0x130
Hasta ahora, esto ha sido difícil de provocar. umount(2) espera un período de gracia en namespace_unlock() antes de liberar el montaje, por lo que solo un montaje cuya última referencia desaparece en otro lugar, como el cierre de un archivo o un chdir fuera de un directorio desmontado perezosamente (lazily unmounted), puede entrar en carrera con una pathwalk. Por tanto, es alcanzable.
Retrasar la liberación hasta que haya pasado un período de gracia. El mapa y la tabla de datos a la que mantiene referencia sobreviven a cualquier pathwalk que encontró el superbloque antes de que desapareciera el montaje. La referencia al módulo de la tabla de datos también se libera desde la callback RCU. utf8-core está compilado siempre que CONFIG_UNICODE esté activada, por lo que no hay una salida del módulo que tenga que esperar a las callbacks.
Overlayfs apunta s_encoding de un overlay hacia el mapa de su primera capa sin tomar una referencia propia. Eso sigue siendo correcto. La capa es mantenida por el overlay, por lo que su mapa solo se libera después de que el overlay haya desaparecido.
If you want to get best quality of vulnerability data, you may have to visit VulDB.