CVE-2026-99180 in Linux
Résumé
par VulDB • 28/10/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
unicode : libérer la carte après une période de grâce (grace period)
generic_ci_d_hash() et generic_ci_d_compare() lisent sb->s_encoding et déréférencent la map unicode alors qu'une pathwalk en mode RCU ne détient que rcu_read_lock(). Les systèmes de fichiers qui les utilisent, ext4, f2fs et tmpfs, libèrent la map avec utf8_unload() depuis ->put_super(), ce qui s'exécute lorsque la dernière référence au montage disparaît. Une lookup encore à l'intérieur d'un tel système de fichiers à ce moment-là lit une map déjà libérée (freed).
Avec une pathwalk bloquée dans utf8_casefold_hash() tandis que la dernière référence vers un tmpfs casefoldé disparaît :
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
Jusqu'à présent, cela a été difficile à exploiter. umount(2) attend une période de grâce dans namespace_unlock() avant de libérer le montage, donc seul un montage dont la dernière référence disparaît ailleurs, comme la fermeture d'un fichier ou un chdir hors d'un répertoire désassemblé paresseusement (lazily unmounted), peut créer une condition de course avec un walker. C'est donc atteignable.
Retarder la libération jusqu'à ce qu'une période de grâce se soit écoulée. La map et les données table auxquelles elle détient une référence survivent alors à toute pathwalk qui a trouvé le superblock avant que le montage ne disparaisse. La référence sur le module data table est également supprimée depuis le callback RCU. utf8-core est compilé en interne chaque fois que CONFIG_UNICODE est défini, il n'y a donc pas de sortie de module qui devrait attendre les callbacks.
Overlayfs pointe s_encoding d'un overlay vers la map de sa première couche sans prendre de référence propre à lui-même. Cela reste correct. La couche est maintenue par l'overlay, donc sa map n'est libérée qu'après que l'overlay a disparu.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.