CVE-2026-98166 in Linuxinformazioni

Riassunto

di VulDB • 06/10/2026

Nel kernel Linux, è stata risolta la seguente vulnerabilità:

drm/ttm: corretto il problema per cui le risorse scambiate (swapped-out) non uscivano mai dal loro intervallo bulk_move

ttm_tt_swapout() restituisce il numero di pagine scambiate in caso di successo e un codice di errore negativo in caso di fallimento; per una ttm popolata, non restituisce mai zero. Il commit b2ed01e7ad3d ("drm/ttm: Fix ttm_bo_swapout() infinite LRU walk on swapout failure") ha spostato la gestione contabile del bulk_move all'interno di ttm_bo_swapout_cb() sotto il controllo "if (!ret)", pertanto le funzioni ttm_resource_del_bulk_move_unevictable() / ttm_resource_move_to_lru_tail() vengono ora saltate in ogni caso di swapout riuscito. La modifica equivalente per lo shrinker nel commit 1d59f36e95f7 ("drm/ttm: Fix ttm_bo_shrink() infinite LRU walk on backup failure") verifica "lret > 0", che era l'intento originale anche in questo caso.

Prima del commit b2ed01e7ad3d, la risorsa veniva rimossa dal bulk_move prima dello swapout; da allora, una risorsa scambiate rimane all'interno dell'intervallo bulk_move del BO (e sulla LRU del manager) pur essendo non evitabile (unevictable). Quando viene successivamente liberata o il BO esce dall'intervallo bulk_move (tramite ttm_resource_free(), ttm_bo_set_bulk_move() tramite amdgpu_vm_bo_del()), ttm_resource_del_bulk_move() la salta a causa del controllo !ttm_resource_unevictable(), lasciando così un endpoint dell'intervallo in pos->first / pos->last che punta alla memoria già liberata. La successiva chiamata a ttm_lru_bulk_move_tail() o ttm_resource_add_bulk_move() su quel cursore costituisce un use-after-free, manifestandosi come WARN resv in ttm_lru_bulk_move_add(), "list_del corruption" (corruzione della lista) in ttm_resource_move_to_lru_tail() o dereferenziazione NULL in ttm_resource_manager_next() -- minuti ore dopo ibernazione, oppure all'uscita del processo / al riavvio successivo. L'analisi di Samuel Ainsworth sul problema drm/amd 5387 (vedi Link) ha identificato il cursore pendente; la mancata rimozione durante lo swapout è la ragione per cui rimane pendente.

La verifica della condizione di successo ripristina la corretta rimozione. Su un AMD Phoenix APU (ASUS UM3406GA, gfx1103) in esecuzione con suspend-then-hibernate su un kernel stabile 7.0.y che include il backport (Ubuntu 7.0.0-31), il bug ha causato l'arresto anomalo di 5 dei 18 cicli di ibernazione; un profilo funzionale di una singola ibernazione ha mostrato 36 chiamate a ttm_tt_swapout() e zero chiamate a ttm_resource_del_bulk_move_unevictable(). Con questa modifica, la rimozione avviene per ogni risorsa scambiate e ulteriori 12 cicli sono stati eseguiti senza errori.

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

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

06/10/2026

Moderazione

accettato

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!