CVE-2026-99082 in Linux信息

摘要

由 VulDB • 2026-10-24

在 Linux 内核中,已修复以下漏洞:

KVM: x86: 使用活动内存槽(active memslots)进行每个 vCPU MMIO 缓存管理

KVM 通过内存槽代次(memslot generation)标记每个 vCPU 的 MMIO 缓存,以便在内存槽更新时使缓存中的 MMIO 信息失效。填充和验证路径均使用 `kvm_memslots()`,该函数无条件选择地址空间 0,即使 vCPU 正在 SMM 模式下运行并使用地址空间 1。

提交记录 56f17dd3fbc4(“kvm: x86: fix stale mmio cache bug”)将内存槽代次添加到缓存键中,以防止内存槽更新后残留条目保持有效状态。当提交记录 699023e23965(“KVM: x86: add SMM to the MMU role, support SMRAM address space”)引入 SMM 地址空间时,这些辅助函数未被转换为使用活动内存槽。

因此,对 SMM 内存槽的更新可能导致在 vCPU 返回正常地址空间后,来自旧 SMM 地址空间的条目看似仍然有效。随后,访客(guest)可导致对同一 GFN 的有效 RAM 访问被作为 KVM_EXIT_MMIO 返回给用户态空间。

通过 VMM 的 RAM 地址空间完成该退出操作时,会绕过 KVM 写跟踪路径直接写入后备页面。如果该页面向支撑嵌套 EPT 表,KVM 可能会继续使用源自旧内容的影子翻译(shadow translations)。`kvm_mmu_write_protect_fault()` 中的 `WARN_ON_ONCE()` 可捕获此无效的缓存和内存槽组合。

在缓存和验证条目时使用 vCPU 的活动内存槽。内存槽代次在不同地址空间中是唯一的,因此该代次也能区分正常视图和 SMM 视图。这与 MMIO SPTE 缓存保持一致,后者已使用 `kvm_vcpu_memslots()`。

在未打补丁的当前主线内核上,一个在 SMM 中填充缓存并仅更新 SMM 内存槽的回归测试会失败预期的 RAM 写入操作,并触发 `kvm_mmu_write_protect_fault()` 警告。经过此更改后,同一测试可完成 RAM 写入且无警告。x86/smm_test、set_memory_region_test 和 memslot_modification_stress_test 等自测用例也均通过。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

来源

Interested in the pricing of exploits?

See the underground prices here!