🇰🇷 한글 설명
Linux 커널의 dm-log 구성 요소에서 32비트 아키텍처 사용 시 bitset_size 변수가 오버플로되는 취약점이 발견되었습니다. region_count를 기반으로 비트맵 메모리 크기를 계산하는 과정에서 값이 0으로 되돌아가는(wrap around) 현상이 발생하여 메모리 할당 오류를 유발할 수 있습니다.
💡 쉬운 설명
32비트 컴퓨터에서 특정 데이터를 처리할 때 계산 결과가 너무 커져서 0으로 잘못 인식되는 문제입니다. 이로 인해 시스템이 필요한 메모리 크기를 제대로 계산하지 못해 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dm-log: fix a bitset_size overflow on 32bit machines
Commit c20e36b7631d ("dm log: fix out-of-bounds write due to
region_count overflow") made sure that region_count could fit in an
unsigned int. But the bitmap memory isn't allocated based on
region_count. It uses bitset_size (a size_t variable). The first step of
calculating bitset_size is to set it to region_count, rounded up to a
multiple of BITS_PER_LONG. If region_size is less than BITS_PER_LONG
smaller than UINT_MAX, it will get rounded up to 2^32. On a 32bit
architecture, this will make bitset_size wrap around to 0 and fail,
despite region_count being valid.
Since bitset_size gets divided by 8, it can hold any valid region_count.
It just needs a special case to handle the rollover. If it is 0, the
value rolled over, and bitset size should be set to the number of bytes
needed to hold 2^32 bits.
📍 영향받는 시스템
32비트 아키텍처 기반의 Linux 커널 (dm-log 모듈 사용 시)
⚔️ 공격 벡터
특정 조건의 region_count 값을 설정하여 메모리 할당 오류를 유발하는 로컬 공격
🛡️ 대응 방법
dm-log의 bitset_size 오버플로를 수정한 최신 Linux 커널로 업데이트
🔧 검증 코드
커널 버전 확인 및 시스템 로그에서 dm-log 관련 메모리 할당 오류 메시지 존재 여부를 확인합니다.
uname -a && dmesg | grep -i 'dm-log'