🔍 CVE-2026-98166

7.8
CVSS Score
HIGH
2026-10-06
2026-10-26 16:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 DRM/TTM 서브시스템에서 스왑 아웃된 리소스가 bulk_move 범위 내에 잘못 남아 있어 발생하는 취약점입니다. 이로 인해 리소스가 해제된 후에도 커서가 해제된 메모리를 가리키게 되어 Use-After-Free, 리스트 손상 또는 NULL 역참조 오류를 유발할 수 있습니다.

💡 쉬운 설명

컴퓨터가 절전 모드에서 깨어나거나 메모리를 정리할 때, 이미 사용이 끝난 메모리 주소를 계속 참조하려고 시도하여 시스템이 충돌하거나 오류가 발생하는 문제입니다. 이는 주로 시스템이 갑자기 멈추거나 재부팅되는 현상으로 나타납니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: drm/ttm: fix swapped-out resources never leaving their bulk_move range ttm_tt_swapout() returns the number of pages swapped out on success and a negative error code on failure; for a populated ttm it never returns zero. Commit b2ed01e7ad3d ("drm/ttm: Fix ttm_bo_swapout() infinite LRU walk on swapout failure") moved the bulk_move bookkeeping in ttm_bo_swapout_cb() under "if (!ret)", so the ttm_resource_del_bulk_move_unevictable() / ttm_resource_move_to_lru_tail() pair is now skipped on every successful swapout. The equivalent change for the shrinker in commit 1d59f36e95f7 ("drm/ttm: Fix ttm_bo_shrink() infinite LRU walk on backup failure") tests "lret > 0", which is what was intended here as well. Before b2ed01e7ad3d the resource was taken off the bulk_move before the swapout; since then a swapped-out resource stays inside its BO's bulk_move range (and on the manager LRU) although it is unevictable. When it is later freed or the BO leaves the bulk_move (ttm_resource_free(), ttm_bo_set_bulk_move() via amdgpu_vm_bo_del()), ttm_resource_del_bulk_move() skips it because of its !ttm_resource_unevictable() guard, so a range endpoint in pos->first / pos->last is left pointing at freed memory. The next ttm_lru_bulk_move_tail() or ttm_resource_add_bulk_move() on that cursor is a use-after-free, seen as the resv WARN in ttm_lru_bulk_move_add(), "list_del corruption" in ttm_resource_move_to_lru_tail() or a NULL dereference in ttm_resource_manager_next() -- minutes to hours after a hibernation, or at process exit / reboot following one. Samuel Ainsworth's analysis of drm/amd issue 5387 (see Link) identified the dangling cursor; the missing removal at swapout time is the reason it dangles. Testing the condition for success restores the removal. On an AMD Phoenix APU (ASUS UM3406GA, gfx1103) running suspend-then-hibernate on a 7.0.y stable kernel carrying the backport (Ubuntu 7.0.0-31) the bug crashed 5 of 18 hibernation cycles; a function profile of one hibernation showed 336 ttm_tt_swapout() calls and zero ttm_resource_del_bulk_move_unevictable() calls. With this change the removal happens for every swapped-out resource and 12 further cycles were clean.

📍 영향받는 시스템

Linux Kernel (DRM/TTM 관련 모듈을 사용하는 시스템, 특히 AMD Phoenix APU 등)

⚔️ 공격 벡터

로컬 공격자가 특정 메모리 관리 시나리오(절전/최대 절전 모드 전환 등)를 유도하여 시스템 충돌을 일으킬 수 있음

🛡️ 대응 방법

해당 취약점이 수정된 최신 버전의 Linux 커널로 업데이트하십시오.

🔧 검증 코드

출력된 커널 버전이 해당 패치가 적용된 최신 안정화 버전인지 확인하십시오.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel