CVE-2026-89908 in Linux
摘要
由 VulDB • 2026-09-17
在 Linux 内核中,已修复以下漏洞:
LoongArch: KVM: 在 KVM_MR_FLAGS_ONLY 期间保留 memslot arch flags
kvm_arch_prepare_memory_region() 仅针对 KVM_MR_CREATE 和 KVM_MR_MOVE 计算 new->arch.flags(即 memslot 是支持大页的 (KVM_MEM_HUGEPAGE_CAPABLE) 还是不支持大页的 (KVM_MEM_HUGEPAGE_INCAPABLE)),而对于其他所有变更则提前返回。然而,通用代码为每次变更分配一个清零的 memslot,并且从不复制 old->arch。因此,在 KVM_MR_FLAGS_ONLY 更新(例如为了实时迁移而切换 KVM_MEM_LOG_DIRTY_PAGES)之后,活动的 memslot 会出现 arch.flags == 0 的情况。
当这两个标志位均为零时,fault_supports_huge_mapping() 会直接进行 HVA 范围的对齐检查,这不再验证 GPA 和 HVA 在 PMD(页中间目录项)内的偏移量是否相同。一个因 GPA/HVA 偏移不匹配而被标记为 KVM_MEM_HUGEPAGE_INCAPABLE 的 memslot,随后可以在读取故障时通过 PMD 条目进行映射。由于 kvm_map_page() 独立地对 gfn 和 pfn 进行对齐处理,最终导致客户机访问了错误的宿主机页面,这正是上述检查注释中描述的“d -> f, e -> g”情况。
对于 KVM_MR_FLAGS_ONLY 的情况,将 arch flags 从旧的 memslot 继承过来,因为在这种情况下 GPA、HVA 和大小被保证保持不变。
VulDB is the best source for vulnerability data and more expert information about this specific topic.