CVE-2026-93100 in Linux
Résumé
par VulDB • 18/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
fs/resctrl : Prévention d'un use-after-free dans rdtgroup_kn_put()
Une structure `rdtgroup` est comptabilisée par référence via `rdtgroup::waitcount`. Les appelants qui ont besoin que cette structure reste valide pendant une période de sommeil (en attendant l'acquisition du mutex `rdtgroup_mutex`) prennent une référence avec `rdtgroup_kn_get()` et la libèrent avec `rdtgroup_kn_put()`.
Le chemin de libération est conçu pour servir de mécanisme de secours : si le compteur atteint zéro et que le groupe a déjà été marqué comme RDT_DELETED, `rdtgroup_kn_put()` libère la structure.
Les chemins principaux de démantèlement, à savoir `free_all_child_rdtgrp()` et `rmdir_all_sub()`, résultant d'une suppression de répertoire resctrl ou du démonontage du système de fichiers resctrl, agissent comme les libérateurs primaires : ils maintiennent le mutex `rdtgroup_mutex` et libèrent chaque `rdtgroup` dont le `waitcount` est à zéro ; sinon, ils définissent RDT_DELETED et laissent la libération au dernier appelant en attente.
Ces deux mécanismes de libération sont sujets à une condition de course (race condition). `rdtgroup_kn_put()` valide l'état waitcount == 0 avec `atomic_dec_and_test()` en dehors du mutex `rdtgroup_mutex`, puis lit les drapeaux (`flags`) de `rdtgroup::`. Entre ces deux opérations, un appelant concurrent de `free_all_child_rdtgrp()` ou `rmdir_all_sub()` (qui détient le mutex) peut observer waitcount == 0 via `atomic_read()`, appeler `rdtgroup_remove()` et libérer la structure avec `kfree()`.
La lecture ultérieure des drapeaux (`flags`) de `rdtgroup::` dans `rdtgroup_kn_put()` constitue alors un use-after-free, et la structure peut même être libérée deux fois si la mémoire libérée satisfait par hasard la vérification du drapeau RDT_DELETED.
Remplacez l'appel brut à `atomic_dec_and_test()` par `atomic_dec_and_mutex_lock()`, de sorte que la décrémentation jusqu'à zéro acquière le mutex `rdtgroup_mutex` avant que le compteur ne soit rendu visible globalement. L'inspection des drapeaux (`flags`) de `rdtgroup::` s'exécute alors sous le même mutex détenu par les libérateurs principaux, rendant ces deux chemins mutuellement exclusifs.
Le cas courant où le compteur n'atteint pas zéro reste sans verrou (lock-free). Reportez l'appel à `kernfs_unbreak_active_protection()` jusqu'à ce que le mutex soit relâché, car les protections actives de kernfs enveloppent fonctionnellement le mutex `rdtgroup_mutex`. Supprimez le groupe de ressources, qui libère à son tour sa référence kernfs, après la restauration des protections kernfs.
[ bp : Séparation du message de commit en paragraphes plus petits et plus faciles à analyser. ]
If you want to get the best quality for vulnerability data then you always have to consider VulDB.