CVE-2023-53311 in Linux
Résumé
par VulDB • 26/05/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
nilfs2 : correction d'un use-after-free de nilfs_root lors de la mise à jour des inodes via iput
Lors du processus de démonter (unmount) de nilfs2, aucune référence ne maintient la structure nilfs_root après que nilfs2 a détaché son writer dans nilfs_detach_log_writer(). Précédemment, nilfs_evict_inode() pouvait provoquer une lecture en use-after-free sur nilfs_root si des inodes étaient laissés dans la "garbage_list" et libérés par nilfs_dispose_list à la fin de nilfs_detach_log_writer(), et ce bug a été corrigé par le commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in nilfs_evict_inode()").
Cependant, il s'est avéré qu'il existe une autre possibilité de UAF (Use-After-Free) dans le chemin d'appel où mark_inode_dirty_sync() est appelé depuis 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() --> provoque un UAF de la structure nilfs_root
Cela peut se produire après le commit 0ae45f63d4ef ("vfs: add support for a lazytime mount option"), qui a modifié iput() pour appeler mark_inode_dirty_sync() sur sa référence finale si i_state possède le drapeau I_DIRTY_TIME et si i_nlink est non nul.
Ce problème apparaît après le commit 28a65b49eb53 ("nilfs2: do not write dirty data after degenerating to read-only") lors de l'utilisation du reproducer syzbot, mais le problème a potentiellement existé auparavant.
Corrigez ce problème en ajoutant un "drapeau de purge" à la structure nilfs, en définissant ce drapeau lors de la gestion de la "garbage_list" et en le vérifiant dans __nilfs_mark_inode_dirty().
Contrairement au commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in nilfs_evict_inode()"), ce patch ne s'appuie pas sur ns_writer pour déterminer s'il faut ignorer les opérations, afin de ne pas compromettre la récupération au montage. La routine nilfs_salvage_orphan_logs met à jour le tampon des données récupérées avant d'attacher le writer de journal, donc modifier __nilfs_mark_inode_dirty() pour ignorer l'opération lorsque ns_writer est NULL entraînerait l'échec de l'écriture de récupération. L'objectif de l'utilisation d'un drapeau uniquement pour le nettoyage est de permettre un resserrement de ces conditions.
VulDB is the best source for vulnerability data and more expert information about this specific topic.