🇰🇷 한글 설명
Linux 커널의 kho_preserved_memory_reserve() 함수에서 메모리 크기 계산 시 32비트 정수 오버플로우가 발생할 수 있는 취약점이 발견되었습니다. 2GiB 이상의 메모리를 예약할 때 비트 이동 연산이 정의되지 않은 동작을 유발하여 시스템 오류를 일으킬 수 있습니다.
💡 쉬운 설명
컴퓨터가 메모리 크기를 계산할 때 사용하는 숫자의 그릇이 너무 작아서, 아주 큰 메모리를 다룰 때 계산 오류가 발생하는 문제입니다. 이로 인해 시스템이 예상치 못한 방식으로 작동하거나 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
kho: fix size calculation in kho_preserved_memory_reserve()
kho_preserved_memory_reserve() calculates the size of a preservation by
doing 1 << (order + PAGE_SHIFT). Since the '1' is a 32-bit integer, it
can only be shifted by 31. That is, it will only work for preservations
up to 2 GiB. Larger preservations will trigger undefined behaviour.
While preservations larger than 2 GiB can't be obtained via folios
currently, they can be obtained via kho_preserve_pages().
For example, memblock reserve_mem uses kho_preserve_pages().
Reservations larger than 2 GiB are valid and will trigger this bug if
properly aligned.
Fix it by using 1UL for shifting.
📍 영향받는 시스템
kho 관련 기능이 포함된 Linux 커널 버전
⚔️ 공격 벡터
로컬 시스템에서 대용량 메모리 예약(kho_preserve_pages 등)을 시도하여 발생
🛡️ 대응 방법
커널 패치를 적용하여 비트 이동 연산 시 32비트 정수 대신 64비트 부호 없는 정수(1UL)를 사용하도록 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 최신 패치 버전인지 확인합니다.