{"id":33235,"date":"2026-10-06T20:31:34","date_gmt":"2026-10-06T12:31:34","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98166"},"modified":"2026-10-06T20:31:34","modified_gmt":"2026-10-06T12:31:34","slug":"cve-2026-98166","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98166","title":{"rendered":"CVE-2026-98166 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ndrm\/ttm: fix swapped-"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>drm\/ttm: fix swapped-out resources never leaving their bulk_move range<\/p>\n<p>ttm_tt_swapout() returns the number of pages swapped out on success and<br \/>\na negative error code on failure; for a populated ttm it never returns<br \/>\nzero. Commit b2ed01e7ad3d (&#8220;drm\/ttm: Fix ttm_bo_swapout() infinite LRU<br \/>\nwalk on swapout failure&#8221;) moved the bulk_move bookkeeping in<br \/>\nttm_bo_swapout_cb() under &#8220;if (!ret)&#8221;, so the<br \/>\nttm_resource_del_bulk_move_unevictable() \/ ttm_resource_move_to_lru_tail()<br \/>\npair is now skipped on every successful swapout. The equivalent change<br \/>\nfor the shrinker in commit 1d59f36e95f7 (&#8220;drm\/ttm: Fix ttm_bo_shrink()<br \/>\ninfinite LRU walk on backup failure&#8221;) tests &#8220;lret &gt; 0&#8221;, which is what<br \/>\nwas intended here as well.<\/p>\n<p>Before b2ed01e7ad3d the resource was taken off the bulk_move before the<br \/>\nswapout; since then a swapped-out resource stays inside its BO&#8217;s<br \/>\nbulk_move range (and on the manager LRU) although it is unevictable.<br \/>\nWhen it is later freed or the BO leaves the bulk_move<br \/>\n(ttm_resource_free(), ttm_bo_set_bulk_move() via amdgpu_vm_bo_del()),<br \/>\nttm_resource_del_bulk_move() skips it because of its<br \/>\n!ttm_resource_unevictable() guard, so a range endpoint in pos-&gt;first \/<br \/>\npos-&gt;last is left pointing at freed memory. The next<br \/>\nttm_lru_bulk_move_tail() or ttm_resource_add_bulk_move() on that cursor<br \/>\nis a use-after-free, seen as the resv WARN in ttm_lru_bulk_move_add(),<br \/>\n&#8220;list_del corruption&#8221; in ttm_resource_move_to_lru_tail() or a NULL<br \/>\ndereference in ttm_resource_manager_next() &#8212; minutes to hours after a<br \/>\nhibernation, or at process exit \/ reboot following one. Samuel<br \/>\nAinsworth&#8217;s analysis of drm\/amd issue 5387 (see Link) identified the<br \/>\ndangling cursor; the missing removal at swapout time is the reason it<br \/>\ndangles.<\/p>\n<p>Testing the condition for success restores the removal. On an AMD<br \/>\nPhoenix APU (ASUS UM3406GA, gfx1103) running suspend-then-hibernate on<br \/>\na 7.0.y stable kernel carrying the backport (Ubuntu 7.0.0-31) the bug<br \/>\ncrashed 5 of 18 hibernation cycles; a function profile of one<br \/>\nhibernation showed 336 ttm_tt_swapout() calls and zero<br \/>\nttm_resource_del_bulk_move_unevictable() calls. With this change the<br \/>\nremoval happens for every swapped-out resource and 12 further cycles<br \/>\nwere clean.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>drm\/ttm: fix swapped-out resources never leaving their bulk_move range<\/p>\n<p>ttm_tt_swapout() returns the number of pages swapped out on<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-33235","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/33235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=33235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=33235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=33235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}