🇰🇷 한글 설명
Linux 커널의 iommufd/iova_bitmap 모듈에서 32비트 정수 상수를 63비트 이상으로 시프트할 때 정의되지 않은 동작을 유발하는 취약점. pgshift 값이 31을 초과하면 상수 '1'의 시프트 연산이 오버플로우되어 UBSAN 에러 발생.
💡 쉬운 설명
Linux 커널의 특정 메모리 관리 부분에서 수학 계산 실수로 인한 버그입니다. 이 버그는 시스템이 비정상적으로 동작하게 만들 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iommufd/iova_bitmap: Fix shift-out-of-bounds in iova_bitmap_offset_to_index()
Resolve a UBSAN shift-out-of-bounds issue in iova_bitmap_offset_to_index()
where shifting the constant "1" (of type int) by bitmap->mapped.pgshift
(an unsigned long value) could result in undefined behavior.
The constant "1" defaults to a 32-bit "int", and when "pgshift" exceeds
31 (e.g., pgshift = 63) the shift operation overflows, as the result
cannot be represented in a 32-bit type.
To resolve this, the constant is updated to "1UL", promoting it to an
unsigned long type to match the operand's type.
📍 영향받는 시스템
Linux kernel iommufd 모듈을 사용하는 모든 버전 (일반적으로 5.10 이상)
⚔️ 공격 벡터
로컬 악용 가능 - IOMMU 장치와 상호작용 가능한 권한 있는 프로세스 필요
🛡️ 대응 방법
Linux 커널 패치 적용 (iova_bitmap_offset_to_index()에서 상수 '1'을 '1UL'로 변경)
🔧 검증 코드
커널 버전 확인 후 IOMMUFD 설정 여부 확인. 설정되어 있으면 해당 커널 버전의 최신 보안 패치로 업그레이드 필요.
uname -r && cat /proc/config.gz 2>/dev/null | zcat | grep CONFIG_IOMMUFD