🇰🇷 한글 설명
Linux 커널의 drm/xe/vf 드라이버에서 VF CCS의 attach/detach 작업과 데이터 이동(BO move) 간의 레이스 컨디션 취약점이 발견되었습니다. 데이터 복사 작업이 완료되기 전이나 완료된 직후에 메타데이터가 조기에 제거되거나 늦게 등록되어, 가상 기능(VF) 마이그레이션 시 데이터 무결성이 깨질 수 있습니다.
💡 쉬운 설명
컴퓨터의 그래픽 처리 장치(GPU) 데이터를 옮기는 과정에서, 작업이 끝나기도 전에 필요한 정보를 미리 지워버리거나 늦게 등록하는 타이밍 오류가 발생합니다. 이로 인해 시스템이 데이터를 옮기는 도중 멈추면 데이터가 깨지거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/xe/vf: Fix VF CCS attach/detach race with in-flight BO moves
xe_bo_move() attaches VF CCS read/write batch buffers (BBs) to a BO
after it transitions NULL/SYSTEM -> TT, and detaches them after it
transitions TT -> SYSTEM. Both operations were done synchronously on
the CPU immediately after building the move's copy/clear fence,
without waiting for that fence to signal. This creates two races with
VF migration:
- Attach happens too late relative to the copy job it is meant to
protect. If the copy job is submitted before the CCS BBs are
attached, a VF migration event that pauses execution mid-copy can
observe partially copied CCS metadata without the attach state
needed to correctly save/restore it.
- Detach happens too early relative to the copy job that moves data
out of TT. The CCS BBs are torn down right after the copy fence is
obtained, while the actual blit may still be in flight. A VF
migration event that pauses execution mid-copy can then race the
save/restore path against the still-running blit, and the CCS BBs
it would need to make sense of the paused state have already been
removed.
Fix both races:
- Move the attach call to before the copy/clear job is submitted, so
the CCS BBs are already registered by the time the copy runs. On
attach failure, unwind and bail out of the move. xe_migrate_ccs_rw_copy()
now takes the destination resource explicitly, since bo->ttm.resource
is not updated to the new resource until after the move commits.
- Detach only after explicitly waiting for the copy fence to signal,
instead of tearing down the CCS BBs immediately after obtaining it.
While here, also fix xe_sriov_vf_ccs_attach_bo() to properly unwind and
propagate errors: the per-context loop previously never broke out on
error, silently discarding earlier failures. Unwind by clearing each
attached context directly via xe_migrate_ccs_rw_copy_clear() instead of
reusing xe_sriov_vf_ccs_detach_bo(), which requires both contexts to be
attached before it will clean up either one.
(cherry picked from commit d45ad0aa7a1eb5d7288b5ed948b05695611dc39e)
📍 영향받는 시스템
Linux Kernel (drm/xe/vf 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
가상 기능(VF) 마이그레이션 이벤트를 유도하여 데이터 복사 작업과 메타데이터 관리 작업 간의 타이밍 차이를 이용한 공격
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 커밋(d45ad0aa7a1eb5d7288b5ed948b05695611dc39e) 이후 버전인지 확인하십시오.
📊 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