CVE-2026-98310
요약
\~에 의해 VulDB • 2026. 10. 06.
리눅스 커널에서 다음 취약점이 해결되었습니다:
drm/xe/shrinker: 시스템 메모드가 아닌 경우 축소(shrinking) 전에 런타임 PM 참조(runtime PM ref)를 획득합니다.
__xe_shrinker_walk()는 SYSTEM 및 TT LRUs(LRU 목록)에 대해 런타임 PM 참조 없이 순회합니다. 시스템 메모드 외부의 bo(buffer object)를 축소하면 GPU 매핑이 무효화되며, 이 경우 장치가 재개(resumed)되어야 합니다. 따라서 장치가 런타임 서스펜드 상태일 때 페이지 테이블 지우기(zap)가 어설트(assert)를 발생시키고 TLB 무효화가 -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 [xe]
do_shrink_slab+0x176/0x7e0 drop_caches_sysctl_handler+0x9c/0xf0
XE_PL_SYSTEM이 아닌 메모리 유형을 순회하기 전에 참조를 획득하고, 이를 획득할 수 없는 경우 중단합니다. 이미 존재하는 shrinker의 acquire 경로를 재사용하여, 회수(reclaim)가 허용되는 곳에서 장치를 직접 재개시키고 그렇지 않은 경우에는 나중에 스캔을 위해 PM 워커를 큐에 추가합니다. 스캔 대상이 충족되면 순회를 중지하므로, 만족된 스캔은 장치를 깨우지 않습니다. 시스템 메모드는 여전히 장치 서스펜드 중에도 회수됩니다.
xe_device_is_l2_flush_optimized()로 이를 게이트 처리합니다. 이는 xe_bo_trigger_rebind()가 비고장 모드(non-fault-mode) vm에 대해 무효화를 발행하는 것과 동일한 조건이며, 따라서 다른 곳에서의 회수는 영향을 받지 않습니다. System CCS 복사본은 이미 xe_bo_shrink()에서 자체 참조를 가지고 있습니다.
비고장 모드(vm)에서만 여기에 도달할 수 있는데, 이는 고장 모드(vm)가 LR 모드를 필요로 하며 해당 vm의 전체 수명 동안 런타임 PM 참조를 유지하기 때문입니다.
GPU가 런타임 서스펜드 상태일 때 igt@xe_madvise@dontneed-before-exec을 사용하여 재현되었습니다.
v2: needs_rpm 확인 간소화 (Matt) Fixes 태그 대상 변경 - 해당 문제는 4e7ebff69aed에 의해 추가된 비고장 모드 경로에서 발생합니다. v3: xe_bo.c 대신 xe_shrinker.c에서 처리 (Thomas) v4: 스캔 대상이 충족되면 순회 중단 (Sashiko) v5: freed page accounting 수정사항에 대한 rebase (Sashiko) v6: shrinker acquire 경로 재사용 - 런타임 pm을 직접 재개하거나 항상 워커를 큐에 추가하지 않음 (Thomas) v7: xe_pm_runtime_put() 대신 xe_shrinker_runtime_pm_put() 사용 (Thomas)
(커밋 628f92b28bf4c371c10207daf6fc4caee0c0db2e에서 cherry picked됨)
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.