🇰🇷 한글 설명
Linux 커널의 AMD IOMMU 구성 중 중첩 도메인 할당 과정에서 오류 체크가 제대로 이루어지지 않는 취약점입니다. 할당 실패 시 발생하는 음수 에러 코드가 부호 없는 정수형(u32)으로 변환되면서 오류 검증을 통과하게 되어, 할당되지 않은 호스트 도메인 ID를 사용하는 문제가 발생합니다.
💡 쉬운 설명
컴퓨터의 메모리 관리 장치가 자원이 부족할 때 '자원이 없다'는 에러를 보내는데, 시스템이 이 에러를 정상적인 번호로 착각하는 문제입니다. 이로 인해 잘못된 주소값이 사용되어 시스템 불안정이나 보안 문제가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommu/amd: Fix ineffective error check in nested domain allocation
amd_iommu_pdom_id_alloc() returns an int: a domain ID on success, or the
negative errno from ida_alloc_range() when the ID space is exhausted or
memory is short. amd_iommu_alloc_domain_nested() stores that return value
in gdom_info->hdom_id, which is a u32, and only then tests it:
gdom_info->hdom_id = amd_iommu_pdom_id_alloc();
if (gdom_info->hdom_id <= 0) {
The assignment discards the sign, so -ENOSPC becomes 0xffffffe4 and the
test never fires. The nested domain is then set up with a host domain ID
that was never allocated, instead of the allocation failing with -ENOSPC.
Keep the value in an int, test it there, and store it only once it is
known to be valid, which is what the other amd_iommu_pdom_id_alloc()
callers already do.
📍 영향받는 시스템
AMD IOMMU를 사용하는 Linux 커널 (패치 적용 전 버전)
⚔️ 공격 벡터
로컬 공격자가 시스템 자원을 고갈시켜 의도적으로 할당 오류를 유도함으로써 잘못된 도메인 ID를 할당받게 함
🛡️ 대응 방법
AMD IOMMU 관련 오류 체크 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 최신 보안 패치 버전인지 확인