🇰🇷 한글 설명
Linux 커널의 DAMON 핵심 로직에서 damon_set_regions() 함수가 빈 영역(길이가 0인 영역)을 적절히 검증하지 못하는 취약점입니다. 이로 인해 CONFIG_DAMON_DEBUG_SANITY가 활성화된 커널에서 WARN_ONCE()가 발생하거나, damon_merge_two_regions() 함수에서 0으로 나누기 오류(divide-by-zero)가 발생할 수 있습니다.
💡 쉬운 설명
리눅스 시스템의 메모리 관리 기능 중 하나인 DAMON에서, 크기가 0인 잘못된 메모리 범위를 입력하면 시스템에 오류가 발생할 수 있는 문제입니다. 이 오류로 인해 시스템 경고가 뜨거나 계산 오류가 발생하여 시스템 안정성에 영향을 줄 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mm/damon/core: validate ranges in damon_set_regions()
DAMON core logic assumes zero length regions don't exist. However, a few
DAMON API callers including DAMON_SYSFS, DAMON_RECLAIM and DAMON_LRU_SORT
allow users to set empty monitoring target regions. This could result in
WARN_ONCE() on CONFIG_DAMON_DEBUG_SANITY enabled kernel, and
divide-by-zero from damon_merge_two_regions().
For example, the WANR_ONCE() can be triggered like below.
# grep DAMON_DEBUG_SANITY /boot/config-$(uname -r)
# CONFIG_DAMON_DEBUG_SANITY=y
# damo start
# cd /sys/kernel/mm/damon/admin/kdamonds/0
# echo 0 > contexts/0/targets/0/regions/0/start
# echo 0 > contexts/0/targets/0/regions/0/end
# echo commit > state
# dmesg
[....]
[ 73.705780] ------------[ cut here ]------------
[ 73.707552] start 0 >= end 0
[ 73.708452] WARNING: mm/damon/core.c:359 at damon_new_region+0x6e/0x80, CPU#1: kdamond.0/758
[...]
All DAMON API callers eventually use damon_set_regions() to setup the
regions. Add the validation logic in the function.
📍 영향받는 시스템
DAMON 기능이 활성화된 Linux 커널 (CONFIG_DAMON_DEBUG_SANITY 설정 포함)
⚔️ 공격 벡터
DAMON_SYSFS, DAMON_RECLAIM, DAMON_LRU_SORT 등의 API를 통해 길이가 0인 모니터링 대상 영역을 설정하여 발생
🛡️ 대응 방법
damon_set_regions() 함수에 영역 길이를 검증하는 로직이 포함된 최신 Linux 커널로 업데이트
🔧 검증 코드
결과값에 CONFIG_DAMON_DEBUG_SANITY=y가 포함되어 있다면 해당 취약점에 노출될 가능성이 있는 환경입니다.
grep CONFIG_DAMON_DEBUG_SANITY /boot/config-$(uname -r)
💻 영향받는 소프트웨어
NVIDIA vGPU Guest Driver for Linux