🔍 CVE-2026-98468

0.0
CVSS Score
UNKNOWN
2026-10-18
2026-10-19 10:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 KVM arm64 환경에서 메모리 압박이 발생할 때, Stage 2 페이지 테이블 해제 과정 중 경보(Warning)가 발생하는 레이스 컨디션 취약점입니다. 이는 실제 오류가 아닌 무해한(benign) 경쟁 상태로 인해 발생하는 잘못된 경보이며, 페이지 테이블 해제 시 발생하는 -EINVAL 값을 오류로 처리하지 않도록 수정되었습니다.

💡 쉬운 설명

컴퓨터가 메모리를 정리하는 과정에서 두 가지 작업이 동시에 일어나며 시스템이 '문제가 생겼다'고 잘못된 경고를 보내는 현상입니다. 실제 시스템 파괴나 데이터 유출을 일으키는 보안 위협은 아니며, 불필요한 경고 메시지만 출력되는 문제입니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: Fix spurious warning for benign stage 2 teardown race kvmtool was used to establish an L1 guest with 8 CPUs and 8 GiB of RAM, an L2 guest with 4 CPUs and 4 GiB of RAM and an L3 guest with 2 CPUs and 2 GiB of RAM, all of which was then exited. Under memory pressure in the L0 host warnings were observed due to migration triggered by compaction: WARNING: arch/arm64/kvm/mmu.c:336 at __unmap_stage2_range+0x64/0x80, CPU#5: kcompactd0/66 Which was, in turn, triggered by an MMU notifier for the host invalidation: mmu_notifier_invalidate_range_start() -> ... -> kvm_mmu_notifier_invalidate_range_start() -> kvm_mmu_unmap_gfn_range() -> kvm_unmap_gfn_range() -> kvm_nested_s2_unmap() -> kvm_stage2_unmap_range() -> __unmap_stage2_range() -> stage2_apply_range() <- -EINVAL, triggering a WARN_ON() Racing with L0's teardown of stage 2 page tables: exit_mm() -> mmput() -> __mmput() -> exit_mmap() -> mmu_notifier_release() -> ... -> kvm_mmu_notifier_release() -> kvm_flush_shadow_all() -> kvm_arch_flush_shadow_all() -> kvm_free_stage2_pgd() -> [ acquire kvm->mmu_lock for write ] -> mmu->pgt = NULL [ among other tasks ] -> [ release kvm->mmu_lock for write ] It turns out there is a benign race resulting in a spurious warning: Thread A - notify: migration | Thread B - notify: release -------------------------------|--------------------------------- < kvm->mmu_lock held > | stage2_apply_range() | get mmu->pgt, check !NULL | ... | kvm_arch_flush_shadow_all() cond_resched_rwlock_write(); | < contend, sleep kvm->mmu_lock > < drop kvm->mmu_lock > | < acquire kvm->mmu_lock> | ... | kvm_free_stage2_pgd() | mmu->pgt = NULL | < invalidate MMU > | ... | < release kvm->mmu_lock > [ scheduled ] | stage2_apply_range() | < loop to next > | get, mmu->pgt, check !NULL | is NULL, return -EINVAL | __unmap_stage2_range() | WARN_ON(-EINVAL) <--- entirely spurious - the race was handled correctly. Fix the spurious warning by updating stage2_apply_range() to no longer treat concurrent PGT teardown on lock release as an error - whether the walker is tearing down page tables or doing something else this is a legitimate reason to abort the operation without error. This keeps the warning in place for all other circumstances. In practice only __unmap_stage2_range() actually does anything with the error so this only impacts that.

📍 영향받는 시스템

Linux kernel (KVM arm64 architecture)

⚔️ 공격 벡터

Local (Memory pressure/Compaction triggered race condition)

🛡️ 대응 방법

Linux 커널을 최신 패치가 적용된 버전으로 업데이트하여 stage2_apply_range()의 오류 처리 로직을 수정해야 합니다.

🔧 검증 코드

출력된 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.

Shell / Script
uname -r

💻 영향받는 소프트웨어

Linux Kernel