CVE-2026-68138
net/sched : sérialiser qdisc_rtab_list contre les get/put concurrents
- Publié
- 10 août 2026
- Mise à jour
- 23 août 2026
- Attribution de CNA
- Linux
- Preuve observée
- 19 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
- 21,0 %
- 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 : sérialiser qdisc_rtab_list contre les get/put concurrents qdisc_get_rtab() et qdisc_put_rtab() modifient la liste chaînée globalement partagée au niveau du processus qdisc_rtab_list ainsi qu'un 'int refcnt' non atomique, le tout sans verrou. Cela n'était sûr que parce que chaque appelant détenait historiquement le mutex RTNL, qui sérialisait toutes les recherches, insertions et libérations de tables de débit. Cette invariant n'est plus valable. cls_flower définit TCF_PROTO_OPS_DOIT_UNLOCKED, donc tc_new_tfilter() conserve rtnl_held == false pour lui et définit TCA_ACT_FLAGS_NO_RTNL. Ce drapeau se propage via tcf_exts_validate_ex() -> tcf_action_init() -> tcf_action_init_1() -> tcf_police_init(), qui appelle qdisc_get_rtab()/qdisc_put_rtab() sans détenir le mutex RTNL. Deux requêtes RTM_NEWTFILTER sur des CPU différents, chacune ajoutant un filtre flower avec une action police portant le même débit, entrent alors en compétition sur qdisc_rtab_list et sur le refcnt non atomique, conduisant à une use-after-free / double-free de la structure struct qdisc_rate_table de kmalloc-2k. qdisc_rtab_list est un global unique (pas par netns), donc l'objet corrompu est partagé à l'échelle du système. BUG : KASAN : slab-use-after-free dans qdisc_put_rtab+0x12f/0x160 qdisc_put_rtab+0x12f/0x160 tcf_police_init+0xda9/0x1590 tcf_action_init_1+0x460/0x6b0 tcf_action_init+0x439/0xa40 tcf_exts_validate_ex+0x42d/0x550 fl_change+0xddd/0x7da0 tc_new_tfilter+0xaa7/0x2420 rtnetlink_rcv_msg+0x95e/0xe90 qui appartient au cache kmalloc-2k de taille 2048 Protéger qdisc_rtab_list et le refcount avec un spinlock dédié. L'allocation (bloquante, GFP_KERNEL) dans qdisc_get_rtab() est effectuée avant la prise du verrou ; si un insert concurrent a ajouté une table identique entre-temps, celle fraîchement allouée est libérée sous le verrou, afin qu'aucun doublon ne soit perdu. qdisc_put_rtab() décrémente désormais le refcount et retire l'élément de la liste sous le même verrou.
Sources
3Utilisation 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.