CVE-2026-53264
net/sched : act_api : utiliser RCU avec libération différée pour le cycle de vie des actions
- Publié
- 25 juin 2026
- Mise à jour
- 5 août 2026
- Attribution de CNA
- Linux
- Preuve observée
- 7 août 2026
CVSS primaire
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HFaible · 30 prochains jours
- Percentile
- 15,6 %
- Date du modèle
- 21 sept. 2026
EPSS est une estimation statistique, et non une certitude ou une mesure d'impact. Combinez-le avec CVSS, le statut KEV, l'exposition et votre environnement.
Résumé
Dans le noyau Linux, la vulnérabilité suivante a été résolue : net/sched: act_api: utiliser RCU avec libération différée pour le cycle de vie des actions Lorsque NEWTFILTER et DELFILTER sont exécutés simultanément, il est possible de créer une course avec une action associée. Illustrons avec CPU0 exécutant NEWTFILTER et CPU1 exécutant DELFILTER : 0: mutex_lock() <-- détient le verrou idr 0: rcu_read_lock() 0: p = idr_find(idr, index) <-- l'action p est valide (RCU protège l'IDR) 0: mutex_unlock() <-- libère le verrou idr 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex détenu 1: idr_remove(idr, index) <-- Action supprimée de l'IDR 1: mutex_unlock() <-- mutex libéré nous permettant de supprimer l'action 1: tcf_action_cleanup(p); kfree(p) <-- Libère p immédiatement, sans différer 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- oups, UAF p pointe vers de la mémoire libérée Ce correctif résout la condition de course entre NEWTFILTER et DELFILTER en ajoutant struct rcu_head à tc_action utilisé dans la libération différée et en introduisant call_rcu() dans le chemin de suppression pour différer le kfree() final. Remarque : il s'agit d'une annulation du commit d7fb60b9cafb ("net_sched: get rid of tcfa_rcu") mais aussi d'une modernisation/simplification pour utiliser directement kfree_rcu(). Illustrons le nouveau chemin de code restauré : 0: rcu_read_lock() 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex détenu 1: idr_remove(idr, index) 1: mutex_unlock() 1: call_rcu(&p->tcfa_rcu, tcf_action_rcu_free) <-- diffère kfree après la période de grâce 0: p = idr_find(idr, index) 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- échoue, refcnt déjà à 0 1: rcu_read_unlock() <-- libère pour que la libération puisse s'exécuter après la période de grâce Après que CPU1 appelle idr_remove(), l'objet n'est plus accessible via l'IDR. L'appel idr_find() ultérieur de CPU0 renverra NULL, et même s'il détenait encore un pointeur obsolète, le kfree() immédiat est désormais différé jusqu'après la période de grâce RCU, donc aucune UAF ne peut se produire.
Sources
2Utilisation responsable
Utilisez les informations de vulnérabilité uniquement sur les systèmes que vous possédez ou que vous êtes autorisé à tester. Kitploit renvoie aux métadonnées de la recherche publique et ne stocke pas de code d'exploitation ni de charges utiles malveillantes.