CVE-2026-98166 in Linuxinformation

Résumé

par VulDB • 06/10/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

drm/ttm : correction des ressources swapées qui ne sortaient jamais de leur plage bulk_move

ttm_tt_swapout() renvoie le nombre de pages échangées en cas de succès et un code d'erreur négatif en cas d'échec ; pour une ttm peuplée, elle ne renvoie jamais zéro. Le commit b2ed01e7ad3d ("drm/ttm : Correction de la boucle LRU infinie dans ttm_bo_swapout() lors d'un échec du swap") a déplacé la comptabilité bulk_move dans ttm_bo_swapout_cb() sous le bloc "if (!ret)", ce qui fait que la paire ttm_resource_del_bulk_move_unevictable() / ttm_resource_move_to_lru_tail() est désormais ignorée lors de chaque échange réussi. Le changement équivalent pour le shrinker, introduit dans le commit 1d59f36e95f7 ("drm/ttm : Correction de la boucle LRU infinie dans ttm_bo_shrink() en cas d'échec du backup"), teste "lret > 0", ce qui correspondait également à l'intention initiale ici.

Avant le commit b2ed01e7ad3d, la ressource était retirée de bulk_move avant le swap ; depuis lors, une ressource échangée reste dans la plage bulk_move du BO (et sur la LRU du gestionnaire) bien qu'elle soit non évictable. Lorsqu'elle est ensuite libérée ou que le BO quitte la plage bulk_move (ttm_resource_free(), ttm_bo_set_bulk_move() via amdgpu_vm_bo_del()), ttm_resource_del_bulk_move() l'ignore en raison de sa garde !ttm_resource_unevictable(), laissant ainsi une extrémité de plage dans pos->first / pos->last pointer vers de la mémoire libérée. Le prochain appel à ttm_lru_bulk_move_tail() ou ttm_resource_add_bulk_move() sur ce curseur constitue un use-after-free, se manifestant par un WARN resv dans ttm_lru_bulk_move_add(), une corruption "list_del" dans ttm_resource_move_to_lru_tail() ou une déréférencement NULL dans ttm_resource_manager_next() -- quelques minutes à plusieurs heures après une hibernation, ou lors de la fermeture du processus / redémarrage qui suit. L'analyse de Samuel Ainsworth concernant le problème drm/amd 5387 (voir Lien) a identifié ce curseur dangling ; l'absence de suppression au moment du swap est la raison pour laquelle il reste dangling.

La vérification correcte de la condition de succès restaure la suppression. Sur un APU AMD Phoenix (ASUS UM3406GA, gfx1103) exécutant une séquence suspendre-ensuite-hiberner sur le noyau stable 7.0.y portant le backport (Ubuntu 7.0.0-31), le bug a provoqué un crash lors de 5 des 18 cycles d'hibernation ; un profilage fonctionnel d'un cycle d'hibernation a montré 336 appels à ttm_tt_swapout() et zéro appel à ttm_resource_del_bulk_move_unevictable(). Avec cette correction, la suppression s'effectue pour chaque ressource échangée et les 12 cycles suivants se sont déroulés sans incident.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Responsable

Linux

Réserver

25/09/2026

Divulgation

06/10/2026

Modérer

accepté

Entrée

VDB-414022

EPSS

0.00198

KEV

non

Activités

faible

Sources

Want to stay up to date on a daily basis?

Enable the mail alert feature now!