🇰🇷 한글 설명
Linux 커널의 iommu/vt-d 구성 요소에서 DMA 별칭(alias) 제거 시 컨텍스트 캐시를 올바른 SID로 플러시하지 않는 취약점이 발견되었습니다. 이로 인해 메모리에서 삭제된 컨텍스트 엔트리가 캐시에 남아있게 되며, 하드웨어가 잘못된 캐시를 참조하여 이미 해제된 PASID 디렉토리에 접근할 수 있습니다.
💡 쉬운 설명
컴퓨터 부품이 사용하는 임시 저장소(캐시)를 지울 때, 엉뚱한 주소를 지우는 바람에 예전 정보가 남는 문제입니다. 이로 인해 시스템이 이미 삭제된 메모리 영역을 잘못 읽거나 접근하여 보안 문제가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommu/vt-d: Flush context cache with correct SID when tearing down aliases
domain_context_clear_one() and device_pasid_table_teardown() are both
invoked once per DMA alias of a device. Each function locates the context
entry using the bus/devfn pair provided by the pci_for_each_dma_alias()
callback, then calls intel_context_flush_no_pasid(), which constructs a
device-selective context-cache invalidation from info->bus and
info->devfn (that is, always the requester ID of the device itself).
As a result, for every alias other than the device’s own RID, the context
entry that was just cleared in memory is never invalidated in the context
cache. Hardware may continue using that stale cached entry. In the
scalable-mode teardown path, intel_pasid_free_table() can then free the
PASID directory still referenced by that stale entry, allowing the IOMMU
to walk freed memory.
Fix this by passing the source ID of the entry being torn down to
intel_context_flush_no_pasid(), instead of deriving it from @info.
📍 영향받는 시스템
Intel VT-d를 사용하는 Linux 커널 (DMA alias 및 scalable-mode 사용 환경)
⚔️ 공격 벡터
취약한 IOMMU 설정을 악용하여 하드웨어가 해제된 메모리 영역(PASID 디렉토리)을 참조하도록 유도
🛡️ 대응 방법
해당 취약점이 수정된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 배포판의 보안 업데이트 버전인지 확인