🇰🇷 한글 설명
Linux 커널의 drm/xe/vm 구성 요소에서 xe_vm_create() 함수 호출 중 resv 객체 할당이 실패할 경우 SVM 리소스가 해제되지 않는 취약점입니다. 이로 인해 비결함 모드(non-fault-mode) VM에서는 gpusvm 상태가 누수되고, 결함 모드(fault-mode) VM에서는 페이지맵 소유자 및 페이지맵 리소스가 누수됩니다.
💡 쉬운 설명
컴퓨터의 그래픽 처리 장치(GPU)를 관리하는 프로그램에서 오류가 발생했을 때, 사용하던 메모리 자원을 제대로 돌려주지 않고 남겨두는 버그입니다. 이 문제가 반복되면 시스템의 메모리가 점차 부족해져 성능이 떨어지거나 시스템이 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/xe/vm: Fix SVM leak on resv obj alloc failure in xe_vm_create()
Commit 9e9787414882 ("drm/xe/userptr: replace xe_hmm with gpusvm") made
xe_svm_init() unconditional in xe_vm_create() and extended it to also
initialize a "simple" gpusvm state for non-fault-mode VMs. The matching
xe_svm_fini() call in xe_vm_close_and_put() was updated to run
unconditionally, but the error unwind path in xe_vm_create() was not.
On the drm_gpuvm_resv_object_alloc() failure path, xe_svm_init() has
already succeeded but xe_svm_fini() is only called when
XE_VM_FLAG_FAULT_MODE is set. For non-fault-mode VMs this leaves
vm->svm.gpusvm partially initialized and leaks the resources allocated
by drm_gpusvm_init().
For fault-mode VMs, xe_svm_init() additionally acquires the pagemap
owner via drm_pagemap_acquire_owner() and the pagemaps via
xe_svm_get_pagemaps(). Those resources are released by xe_svm_close(),
not xe_svm_fini(). On the same error path, xe_svm_close() is not
called either, so fault-mode VMs leak the pagemap owner and pagemaps.
Fix both leaks:
- Call xe_svm_fini() unconditionally on the err_svm_fini path, matching
the unconditional xe_svm_init() call. Move the vm->size = 0
assignment out of the conditional so the xe_vm_is_closed() assert in
xe_svm_fini() (and xe_svm_close()) holds for both modes.
- Call xe_svm_close() for fault-mode VMs before xe_svm_fini(), matching
the ordering used in xe_vm_close_and_put().
(cherry picked from commit ca2a3587d577ba764e0fe628fb676244fc33ddd4)
📍 영향받는 시스템
Linux Kernel (drm/xe 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
로컬 공격자가 특정 조건에서 GPU 가상 머신 생성을 반복적으로 실패하게 유도하여 메모리 누수를 유발할 수 있음
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
💻 영향받는 소프트웨어
NVIDIA vGPU Guest Driver for Linux