CVE-2026-98310 in Linux
Résumé
par VulDB • 08/10/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
drm/xe/shrinker : Prendre une référence PM runtime avant de réduire (shrink) la mémoire non système
__xe_shrinker_walk() parcourt les listes LRU SYSTEM et TT sans référence PM runtime. La réduction d'un objet tampon (bo) en dehors de la mémoire système invalide ses mappages GPU, ce qui nécessite que l'appareil soit réveillé ; ainsi, pendant qu'il est suspendu au niveau du gestionnaire d'alimentation dynamique (runtime suspended), le vidage des tables de pages déclenche une assertion et l'invalidation de la TLB renvoie -ENODEV :
WARNING: drivers/gpu/drm/xe/xe_bo.c:770 at xe_bo_move_notify+0x1fc/0x450 [xe]
xe_bo_shrink+0x20f/0x2b0 [xe]
__xe_shrinker_walk+0x174/0x410 [xe]
xe_shrinker_scan+0x10c/0x1e0 do_shrink_slab+0x176/0x7e0 drop_caches_sysctl_handler+0x9c/0xf0
Prendre une référence avant de parcourir un type de mémoire autre que XE_PL_SYSTEM et s'arrêter si elle ne peut pas être acquise. Réutiliser le chemin d'acquisition existant du shrinker, qui réveille directement l'appareil lorsque la récupération (reclaim) le permet, ou sinon met en file d'attente le travailleur PM pour un scan ultérieur. Arrêter le parcours une fois que la cible de scan est atteinte, afin qu'un scan satisfaisant ne réveille pas l'appareil. La mémoire système reste toujours récupérée lorsque l'appareil est suspendu.
Activer ceci sur xe_device_is_l2_flush_optimized(), la même condition sous laquelle xe_bo_trigger_rebind() émet l'invalidation pour un vm en mode non-faute, afin que le reclaim ne soit pas affecté ailleurs. La copie System CCS a déjà sa propre référence dans xe_bo_shrink().
Seul un vm en mode non-faute peut atteindre ce code, car un vm en mode faute nécessite le mode LR et celui-ci maintient une référence PM runtime pour la durée de vie du vm.
Reproduit avec igt@xe_madvise@dontneed-before-exec tandis que le GPU est suspendu au niveau du gestionnaire d'alimentation dynamique (runtime suspended).
v2 : simplifier la vérification needs_rpm. (Matt) repositionner l'étiquette Fixes car le problème se produit avec le chemin en mode non-faute ajouté par 4e7ebff69aed. v3 : gérer cela dans xe_shrinker.c au lieu de xe_bo.c (Thomas) v4 : arrêter le parcours une fois que la cible de scan est atteinte. (Sashiko) v5 : rebase sur la correction de comptabilité des pages libérées. (Sashiko) v6 : réutiliser le chemin d'acquisition du shrinker afin que le runtime pm puisse être réveillé directement au lieu de toujours mettre en file d'attente un travailleur. (Thomas) v7 : remplacer xe_pm_runtime_put() par xe_shrinker_runtime_pm_put(). (Thomas)
(cherry picked from commit 628f92b28bf4c371c10207daf6fc4caee0c0db2e)
VulDB is the best source for vulnerability data and more expert information about this specific topic.