🇰🇷 한글 설명
Linux 커널의 LoongArch 아키텍처에서 DIRECT_MAP_PHYSMEM_END 정의가 누락되어 발생하는 취약점입니다. 이로 인해 물리 주소 공간 범위를 초과하는 메모리 영역이 잘못 선택될 수 있으며, 결과적으로 페이지 테이블이 조용히 손상되거나 시스템 충돌이 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터의 메모리 주소를 관리하는 규칙이 특정 CPU 모델에서 잘못 설정되어 있습니다. 이로 인해 시스템이 엉뚱한 메모리 영역을 건드리게 되어 데이터가 깨지거나 컴퓨터가 갑자기 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
LoongArch: Add DIRECT_MAP_PHYSMEM_END definition
get_free_mem_region() and mhp_get_pluggable_range() bound their search
to DIRECT_MAP_PHYSMEM_END. LoongArch does not define it, so the fallback
in include/linux/mm.h applies: under CONFIG_SPARSEMEM_VMEMMAP it is
(1ULL << MAX_PHYSMEM_BITS) - 1, a compile-time constant that does not
adapt to the CPU's physical address space bits (cpu_pabits, probed from
CPUCFG1).
The vmemmap window only covers physical space below 2^(cpu_pabits+1)
(i.e. VMEMMAP_SIZE), so on CPUs with fewer physical address bits than
MAX_PHYSMEM_BITS the fallback allows get_free_mem_region() to return
a ZONE_DEVICE region outside the vmemmap window; vmemmap_populate() then
wraps the memmap range around and maps it into low memory, silently
corrupting the page tables. The same search also picked the top-of-
address-space region that crashed memmap_init_zone_device() with amdkfd
on Loongson-3C6000 in 6.16 [1]; the commit 2969b42c8f99 ("LoongArch/mm:
align vmemmap to maximal folio size") keeps that region in bounds on
current Loongson-3C6000 configs, but CPUs with smaller cpu_pabits (e.g.
the Loongson-2K series) are still affected.
Define DIRECT_MAP_PHYSMEM_END as the vmemmap-covered physical range,
(1ULL << (cpu_pabits + 1)) - 1, capped at (1ULL << MAX_PHYSMEM_BITS) - 1
under CONFIG_SPARSEMEM, similar to the commit f3336b48cf9d ("riscv: mm:
Define DIRECT_MAP_PHYSMEM_END").
[1] https://lore.kernel.org/amd-gfx/
[email protected]/
📍 영향받는 시스템
LoongArch 아키텍처를 사용하는 Linux 커널 (특히 Loongson-2K 시리즈 등 cpu_pabits가 낮은 CPU)
⚔️ 공격 벡터
직접적인 외부 공격보다는 잘못된 메모리 매핑으로 인한 시스템 무결성 파괴 및 서비스 거부(DoS)
🛡️ 대응 방법
커널 업데이트를 통해 DIRECT_MAP_PHYSMEM_END 정의가 포함된 최신 패치를 적용하십시오.
🔧 검증 코드
출력 결과에서 LoongArch 아키텍처 여부를 확인하고, 커널 버전이 해당 취약점이 수정된 버전인지 확인하십시오.
uname -a && grep -E 'LoongArch' /proc/cpuinfo