🇰🇷 한글 설명
Linux 커널의 IOMMU io-pgtable-arm 모듈 unmap 경로에서, 매핑되지 않은 PTE를 만났을 때 size_t 반환형에 음수 에러 코드(-ENOENT)를 반환하여 부호 없는 정수로 변환되는 버그가 수정되었습니다. 이로 인해 발생하던 IOVA 주소 오버플로우와 BUG_ON 트리거 문제를 해결하기 위해 에러 시 0을 반환하도록 변경되었습니다.
💡 쉬운 설명
컴퓨터의 하드웨어 메모리 접근을 관리하는 부분에서 잘못된 값이 계산되어 시스템이 강제 중지될 수 있는 문제였습니다. 이번 수정으로 오류 상황에서 안전하게 0을 돌려주도록 바뀌었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommu/io-pgtable-arm: fix size_t signedness bug in unmap path
__arm_lpae_unmap() returns size_t but was returning -ENOENT (negative
error code) when encountering an unmapped PTE. Since size_t is unsigned,
-ENOENT (typically -2) becomes a huge positive value (0xFFFFFFFFFFFFFFFE
on 64-bit systems).
This corrupted value propagates through the call chain:
__arm_lpae_unmap() returns -ENOENT as size_t
-> arm_lpae_unmap_pages() returns it
-> __iommu_unmap() adds it to iova address
-> iommu_pgsize() triggers BUG_ON due to corrupted iova
This can cause IOVA address overflow in __iommu_unmap() loop and
trigger BUG_ON in iommu_pgsize() from invalid address alignment.
Fix by returning 0 instead of -ENOENT. The WARN_ON already signals
the error condition, and returning 0 (meaning "nothing unmapped")
is the correct semantic for size_t return type. This matches the
behavior of other io-pgtable implementations (io-pgtable-arm-v7s,
io-pgtable-dart) which return 0 on error conditions.
📍 영향받는 시스템
패치가 적용되지 않은 Linux 커널 버전 (ARM 기반 IOMMU를 사용하는 시스템)
⚔️ 공격 벡터
로컬 또는 장치 드라이버 경로를 통해 잘못된 unmap 요청을 유발하여 커널 패닉(서비스 거부)을 일으킬 수 있음
🛡️ 대응 방법
배포판이 제공하는 최신 Linux 커널 보안 업데이트를 적용하고 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 공지와 대조하여 CVE-2026-23067 수정이 포함된 빌드인지 확인 (수정 커밋이 포함된 버전 이상이면 패치 적용됨)