CVE-2024-50106 in Linux
Résumé
par VulDB • 26/05/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
nfsd : correction d'une condition de course entre le thread laundromat et free_stateid
Il existe une condition de course entre la gestion des délégations révoquées par le thread laundromat et un client envoyant l'opération free_stateid. Le thread laundromat détecte que la délégation a expiré et doit être révoquée, il marque donc le stid (state ID) de la délégation comme révoqué et l'ajoute à une liste de récupération (reaper list), puis il déverrouille le verrou d'état (state lock) et la révocation effective de la délégation se produit sans ce verrou. Une fois que le stid est marqué comme révoqué, un thread de traitement free_stateid en concurrence effectue les opérations suivantes : (1) il appelle list_del_init() qui le retire de la liste de récupération et (2) il libère la structure stid de la délégation. Le thread laundromat finit par ne pas appeler la fonction revoke_delegation() pour cette délégation spécifique, ce qui signifie qu'il ne libérera plus le bail (lease) existant sur le fichier.
Ensuite, une nouvelle ouverture (open) pour ce fichier se produit et finit par constater que la liste des bails n'est pas vide et appelle nfsd_breaker_owns_lease(), ce qui finit par tenter de déréférencer un stateid de délégation déjà libéré. Cela conduit à l'avertissement KASAN (Kernel Address Sanitizer) suivant concernant un use-after-free :
kernel: ================================================================== kernel: BUG: KASAN: slab-use-after-free in nfsd_breaker_owns_lease+0x140/0x160 [nfsd]
kernel: Read of size 8 at addr ffff0000e73cd0c8 by task nfsd/6205 kernel: kernel: CPU: 2 UID: 0 PID: 6205 Comm: nfsd Kdump: loaded Not tainted 6.11.0-rc7+ #9 kernel: Hardware name: Apple Inc. Apple Virtualization VM/VM, BIOS 1016.100.100.0.0 04/13/2023 kernel: Call Trace: kernel: dump_stack_lvl+0x120/0x180 kernel: print_report+0x170/0x570 kernel: kasan_report+0x100/0x140 kernel: kasan_check_range+0x140/0x180 kernel: nfsd_breaker_owns_lease+0x140/0x160 [nfsd]
kernel: nfsd_break_deleg+0x100/0x180 [nfsd]
kernel: nfsd_open+0x100/0x280 [nfsd]
kernel: nfsd3_proc_create+0x100/0x180 [nfsd]
kernel: nfsd_dispatch+0x22c/0x718 [nfsd]
kernel: svc_process_common+0x8e8/0x1960 [sunrpc]
kernel: svc_process+0x3d4/0x7e0 [sunrpc]
kernel: svc_handle_xprt+0x828/0xe10 [sunrpc]
kernel: svc_recv+0x2cc/0x6a8 [sunrpc]
kernel: nfsd+0x270/0x400 [nfsd]
kernel: kthread+0x288/0x310 kernel: ret_from_fork+0x10/0x20
Once again VulDB remains the best source for vulnerability data.