🇰🇷 한글 설명
Linux 커널의 iommu/vt-d 구성 요소에서 컨텍스트 엔트리를 해제할 때 'Present' 비트를 먼저 지우지 않아 발생하는 취약점입니다. 이로 인해 하드웨어가 불완전하게 수정된(torn) 엔트리를 읽어 들여 예측 불가능한 동작이나 오류가 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터 부품이 정보를 읽는 도중에 정보가 수정되어 데이터가 꼬이는 현상이 발생할 수 있는 문제입니다. 이로 인해 시스템이 갑자기 멈추거나 예상치 못한 오류가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommu/vt-d: Clear Present bit before tearing down context entry
When tearing down a context entry, the current implementation zeros the
entire 128-bit entry using multiple 64-bit writes. This creates a window
where the hardware can fetch a "torn" entry — where some fields are
already zeroed while the 'Present' bit is still set — leading to
unpredictable behavior or spurious faults.
While x86 provides strong write ordering, the compiler may reorder writes
to the two 64-bit halves of the context entry. Even without compiler
reordering, the hardware fetch is not guaranteed to be atomic with
respect to multiple CPU writes.
Align with the "Guidance to Software for Invalidations" in the VT-d spec
(Section 6.5.3.3) by implementing the recommended ownership handshake:
1. Clear only the 'Present' (P) bit of the context entry first to
signal the transition of ownership from hardware to software.
2. Use dma_wmb() to ensure the cleared bit is visible to the IOMMU.
3. Perform the required cache and context-cache invalidation to ensure
hardware no longer has cached references to the entry.
4. Fully zero out the entry only after the invalidation is complete.
Also, add a dma_wmb() to context_set_present() to ensure the entry
is fully initialized before the 'Present' bit becomes visible.
📍 영향받는 시스템
Linux kernel (iommu/vt-d 관련 모듈 사용 시스템)
⚔️ 공격 벡터
하드웨어와 소프트웨어 간의 데이터 동기화 타이밍 차이를 이용한 Race Condition
🛡️ 대응 방법
커널 업데이트를 통해 Present 비트 선제 제거 및 메모리 배리어(dma_wmb)가 적용된 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 최신 보안 패치 버전인지 확인하십시오.