CVE-2026-90040 in Linux
要約
〜によって VulDB • 2026年09月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
KVM: SEV: SNP VMSAのバックングgmemページが消去された場合、強制的にSNP VMSAを無効化する
SNP VMに対して`gmem_invalidate_range()`呼び出しを設定し、バックニングgmemページが無効化されている場合(例えば、`PUNCH_HOLE`が行われている場合など)、vCPUが強制的にゲストが提供したVMSAの再読み込み/再確認を行うようにする。APICアクセスページに対するVMXの実装と同様のコアロジックを使用して無効化を処理する。これら2つの概念はほぼ同一であり、ページの物理アドレスをvCPUの制御構造体に挿入する:
1. 無効化シーケンスカウンサのスナップショットを取得 2. pfn(この場合はguest_memfdから)を取得 3. mmu_lockを読み取り用に取得 4. リトライが必要な場合は再リクエストを行い、そうでなければ変更をコミット。
注記:#4の再リクエストアクションは必要である。KVMのリトライロジックには曖昧さがあり(つまり、誤検知が発生し得るため)、guest_memfdページがドロップされた場合、後続の再読み込みでguest_memfdからPFNを取得できず、KVMは`KVM_RUN`に失敗する。リトライが誤検知によるものである場合、KVMは無効化通知イベント(MMU notifier events)が存在しなくなるまでリトライを続け(「外側」ループでリトライを行い、必要に応じてロックを解放してスケジューリングを行う)。
注記#2!関連するmemslotがDELETEまたはMOVEされた際にVMSAを無効化するよう注意すること。`PUNCH_HOLE`に応じた無効化はmemslotのバインディングに依存している(KVMには、どのGFN範囲を無効化すべきかがバインディングなしでは分からない)。さらに重要なのは、VMSAのマッピングにはmemslotが必要であり、つまり、そのmemslotが消えた場合は、基盤となるguest_memfd inodeの状態に関わらず無効化する必要があるということである。
vCPUの`control.vmsa_pa`(これは`pre_sev_run()`によってチェックされる)を無効化しない場合、ファームウェアがRMPUPDATEを拒否し(vCPUがアクティブに実行中、つまりVMSAページが使用中の場合)、FAIL_INUSEでページの回収を試みるため、KVMはページを適切に解放できない。その結果、次の使用時にSNP VMに対してまだ割り当てられているため、RMP #PFが発生する。
SEV-SNP: PFN 78d198に対するRMPUPDATEが失敗しました, pg_level: 1, ret: 3 SEV-SNP: PFN 0x78d198, RMPエントリ: [0xfff0000000144001 - 0x000000000000000f]
CPU: 3 UID: 0 PID: 31345 Comm: sev_snp_vmsa_pu Tainted: G U O Tainted: [U]=USER, [O]=OOT_MODULE
ハードウェア名: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.86.0-102 01/25/2026 Call Trace: 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 RIP: 0033:0x496c7e ------------[ 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
ハードウェア名: 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: 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 RIP: 0033:0x496c7e irq event stamp: 20689 hardirqs last enabled at (20699): [] __console_unlock+0x5c/0x60
hardirqs last disabled at (20708): [] __console_unlock+0x41/0x60
softirqs last enabled at (20722): [] __irq_exit_rcu+0x7e/0x140
softirqs last disabled at (20717): [] __irq_exit_rcu+0x7e/0x140
---[ end trace 0000000000000000 ]---
BUG: アドレス ffff99 のページフォールトを処理できません ---truncated---
VulDB is the best source for vulnerability data and more expert information about this specific topic.