CVE-2026-90040 in Linux
요약
\~에 의해 VulDB • 2026. 09. 17.
리눅스 커널에서 다음 취약점이 해결되었습니다.
KVM: SEV: 백킹 gmem 페이지가 zapped될 경우 SNP VMSA를 강제로 무효화하십시오
SNP VM에 대해 `gmem_invalidate_range()` 호출을 연결하고, 이를 사용하여 백킹 gmem 페이지가 무효화되는 경우(예: PUNCH_HOLE 처리 중) vCPU가 게스트에서 제공한 VMSA를 다시 로드/확인하도록 강제합니다. 두 개념이 거의 동일하므로 APIC 접근 페이지에 대해 VMX가 수행하는 것과 동일한 핵심 로직을 사용하여 무효화를 처리하십시오: 물리 주소의 페이지를 vCPU의 제어 구조체에 삽입합니다.
1. 무효화 시퀀스 카운터를 스냅샷으로 저장합니다. 2. pfn(이 경우 guest_memfd에서)을 가져옵니다. 3. 읽기 전용으로 mmu_lock을 획득합니다. 4. 재시도가 필요한 경우 다시 로드 요청을 수행하고, 그렇지 않으면 변경 사항을 커밋합니다.
참고: #4의 재요청 조치는 KVM의 재시도 로직이 모호하므로(즉, 위양성(false positives)이 발생할 수 있음) 필요합니다. guest_memfd 페이지가 삭제된 경우, 이후의 일부 로드에서 guest_memfd로부터 PFN을 얻지 못하게 되며, KVM은 `KVM_RUN` 실패를 발생시킵니다. 재시도가 위양성에 의한 것인 경우, KVM에는 관련 없는 MMU notifier 이벤트가 없을 때까지 재시도합니다(필요한 경우 잠금을 해제하고 리스케줄링하는 "외부" 루프에서 재시도함).
참고 #2! relevant memslot이 삭제되거나 이동될 때 VMSA를 무효화하십시오. PUNCH_HOLE에 대한 무효화는 memslot 바인딩을 전제로 합니다(KVM은 바인딩 없이는 어떤 GFN 범위를 무효화해야 할지 알 수 없음). 더 중요한 것은, VMSA 매핑에는 memslot이 필요하므로(즉, underlying guest_memfd inode의 상태와 관계없이 해당 memslots가 사라지면 무효화되어야 함)입니다.
vCPU의 `control.vmsa_pa`(이는 `pre_sev_run()`에서 확인됨)를 무효화하지 않으면 KVM이 페이지를 적절하게 해제하지 못할 수 있습니다. vCPU가 활성 실행 중(즉, VMSA 페이지가 사용 중인 경우)인 경우 펌웨어는 FAIL_INUSE로 해당 페이지 회수를 위한 RMPUPDATE를 거부하기 때문입니다. 이는 다음 사용 시 RMP #PF(Root Page Fault)로 이어지며, 페이지가 여전히 SNP VM에 할당되어 있기 때문입니다.
SEV-SNP: PFN 78d198에 대한 RMPUPDATE 실패, pg_level: 1, ret: 3 SEV-SNP: PFN 0x78d198, RMP entry: [0xfff0000000144001 - 0x000000000000000f]
CPU: 3 UID: 0 PID: 31345 Comm: sev_snp_vmsa_pu Tainted: G U O Tainted: [U]=USER, [O]=OOT_MODULE
Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.86.0-102 01/25/2026 Call Trace: <TASK> dump_stack_lvl+0x54/0x70 rmpupdate+0x12c/0x140 rmp_make_shared+0x3b/0x60 sev_gmem_invalidate+0xe0/0x170 [kvm_amd]
delete_from_page_cache_batch+0x1d8/0x220 truncate_inode_pages_range+0x120/0x3d0 kvm_gmem_fallocate+0x19a/0x270 [kvm]
vfs_fallocate+0x1bc/0x1f0 __x64_sys_fallocate+0x48/0x70 do_syscall_64+0x10a/0x480 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ------------[ cut here ]------------
SEV: PFN 0x78d198에 대한 RMP 엔트리 업데이트 실패, 오류 -14 WARNING: arch/x86/kvm/svm/sev.c:5160 at sev_gmem_invalidate+0x126/0x170 [kvm_amd], CPU#3: sev_snp_vmsa_pu/31345
CPU: 3 UID: 0 PID: 31345 Comm: sev_snp_vmsa_pu Tainted: G U O Tainted: [U]=USER, [O]=OOT_MODULE
Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.86.0-102 01/25/2026 RIP: 0010:sev_gmem_invalidate+0x12b/0x170 [kvm_amd]
Call Trace: <TASK> delete_from_page_cache_batch+0x1d8/0x220 truncate_inode_pages_range+0x120/0x3d0 kvm_gmem_fallocate+0x19a/0x270 [kvm]
vfs_fallocate+0x1bc/0x1f0 __x64_sys_fallocate+0x48/0x70 do_syscall_64+0x10a/0x480 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> irq event stamp: 20689 hardirqs last enabled at (20699): [<ffffffff8e76092c>] __console_unlock+0x5c/0x60
hardirqs last disabled at (20708): [<ffffffff8e760911>] __console_unlock+0x41/0x60
softirqs last enabled at (20722): [<ffffffff8e6cd74e>] __irq_exit_rcu+0x7e/0x140
softirqs last disabled at (20717): [<ffffffff8e6cd74e>] __irq_exit_rcu+0x7e/0x140
---[ end trace 0000000000000000 ]---
BUG: unable to handle page fault for address: ffff99 ---truncated---
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.