🇰🇷 한글 설명
Linux 커널 arm64 아키텍처에서 Qualcomm Monaco 플랫폼의 Gunyah 하이퍼바이저 메모리 영역이 제대로 예약되지 않아 발생하는 취약점입니다. 커널 메모리 할당자가 하이퍼바이저 소유 메모리를 할당하면서 'Synchronous External Abort' 예외 및 커널 크래시를 유발합니다. EFI 펌웨어의 메모리 맵 불일치로 인해 0x91a88000–0x91afffff 영역이 일반 메모리로 잘못 표시되는 것이 원인입니다.
💡 쉬운 설명
모나코 칩셋 기반 기기에서 하이퍼바이저와 운영체제의 메모리 영역이 겹쳐서 시스템이 예기치 않게 충돌하는 문제입니다. 펌웨어 설정을 수정하여 메모리 영역을 명확히 분리하면 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
arm64: dts: qcom: monaco: Reserve full Gunyah metadata region
We observe spurious "Synchronous External Abort" exceptions
(ESR=0x96000010) and kernel crashes on Monaco-based platforms.
These faults are caused by the kernel inadvertently accessing
hypervisor-owned memory that is not properly marked as reserved.
>From boot log, The Qualcomm hypervisor reports the memory range
at 0x91a80000 of size 0x80000 (512 KiB) as hypervisor-owned:
qhee_hyp_assign_remove_memory: 0x91a80000/0x80000 -> ret 0
However, the EFI memory map provided by firmware only reserves the
subrange 0x91a40000–0x91a87fff (288 KiB). The remaining portion
(0x91a88000–0x91afffff) is incorrectly reported as conventional
memory (from efi debug):
efi: 0x000091a40000-0x000091a87fff [Reserved...]
efi: 0x000091a88000-0x0000938fffff [Conventional...]
As a result, the allocator may hand out PFNs inside the hypervisor
owned region, causing fatal aborts when the kernel accesses those
addresses.
Add a reserved-memory carveout for the Gunyah hypervisor metadata
at 0x91a80000 (512 KiB) and mark it as no-map so Linux does not
map or allocate from this area.
For the record:
Hyp version: gunyah-e78adb36e debug (2025-11-17 05:38:05 UTC)
UEFI Ver: 6.0.260122.BOOT.MXF.1.0.c1-00449-KODIAKLA-1
📍 영향받는 시스템
Qualcomm Monaco 플랫폼 기반 ARM64 리눅스 시스템, Gunyah 하이퍼바이저 사용 환경
⚔️ 공격 벡터
로컬 시스템 설정 오류로 인한 메모리 접근 위반 (직접 공격 벡터 아님)
🛡️ 대응 방법
리눅스 커널 업데이트 (패치: reserved-memory carveout 추가로 0x91a80000 영역을 no-map 표시)
🔧 검증 코드
첫 번째 명령은 Monaco/Gunyah 플랫폼 확인, 두 번째는 커널 버전과 memmap 설정 확인 (memmap으로 0x91a80000 영역이 예약되어 있으면 패치 적용됨)
grep -i 'monaco\|gunyah' /proc/device-tree/compatible 2>/dev/null || uname -r | grep -E '^[0-9]+\.[0-9]+' && cat /proc/cmdline | grep -o 'memmap=[^ ]*'