这又是什么
ping9timeout:https://security-tracker.debian.org/tracker/CVE-2026-99082 来个 LLM 总结:
CVE-2026-99082 漏洞概述
CVE-2026-99082 是 Linux 内核 x86 架构下 KVM(Kernel-based Virtual Machine)子系统的安全漏洞,主要涉及 per-vCPU MMIO 缓存 与 内存槽(memslot) 在处理系统管理模式(SMM)地址空间时的同步失效问题。
漏洞根因
- 硬编码默认地址空间:KVM 依赖 memslot generation(代数标识)确保内存槽更新时废弃旧的 MMIO 缓存数据。然而在填充(fill)与验证(validation)MMIO 缓存路径中,内核直接调用了
kvm_memslots(),该函数无条件指向默认的地址空间 0。 - SMM 视图未适配:当 vCPU 处于 SMM(使用专用地址空间 1 / SMRAM)时,memslot 的更新无法正确反映到原逻辑中。当 vCPU 退出 SMM 返回正常模式后,旧 SMM 地址空间的陈旧缓存条目可能仍然被判断为有效。
影响与风险
- 绕过 KVM 写追踪机制:虚拟机客机(Guest)可利用残留的错误缓存,将对合法物理内存(RAM)同一 GFN 的访问伪装并触发为
KVM_EXIT_MMIO抛给用户态 VMM。 - 影子页表状态脱节:用户态 VMM 在处理该退出并直接向后端内存写入数据时,会完全绕过 KVM 的写追踪(write-tracking)逻辑。若该内存页作为嵌套 EPT(Nested EPT)的页表底座,KVM 会持续使用基于旧内存派生的影子映射(shadow translations),导致虚拟化层状态不一致与潜在的内存越界 / 劫持风险。
- 内核告警触发:在未打补丁的主线内核中,该错误缓存组合会触发
kvm_mmu_write_protect_fault()中的WARN_ON_ONCE()内核断言告警。
修复方案
- 改用当前活动内存槽:将 MMIO 缓存的填充与校验路径统一改用
kvm_vcpu_memslots(),动态关联 vCPU 当前真实的活动 memslot,使其与 MMIO SPTE 缓存的逻辑对齐。 - 跨地址空间隔离:利用 memslot generation 在各个地址空间全局唯一的特性,天然区分普通模式与 SMM 视图。
- 测试验证:补丁成功使 SMM 缓存回归测试在无警告的情况下正常完成 RAM 写入,并通过了内核自带的
x86/smm_test、set_memory_region_test及memslot_modification_stress_test自动化用例。
参考来源
共 1 条回复- 硬编码默认地址空间:KVM 依赖 memslot generation(代数标识)确保内存槽更新时废弃旧的 MMIO 缓存数据。然而在填充(fill)与验证(validation)MMIO 缓存路径中,内核直接调用了