CVE-2026-23005
x86/fpu:当 XFD[i]=1 时,清除客户机 XSAVE 状态中的 XSTATE_BV[i]
- 已发布
- 2026年1月25日
- 已更新
- 2026年9月8日
- 分配 CNA
- Linux
- 观察到的证据
- 2026年8月6日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H低 · 未来 30 天
- 百分位
- 11.1%
- 型号日期
- 2026年9月21日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
在 Linux 内核中,已解决以下漏洞:x86/fpu:在 guest XSAVE 状态中,每当 XFD[i]=1 时清除 XSTATE_BV[i] 当通过 KVM_SET_XSAVE 加载 guest XSAVE 状态,以及在响应 guest WRMSR 更新 XFD 时,清除已保存(或待恢复)XSTATE_BV 中由 XFD 禁用的特性,以确保 KVM 不会尝试加载通过 guest 的 XFD 禁用的特性状态。由于内核使用 guest 的 XFD 执行 XRSTOR,在 XFD[i]=1 的情况下保存 XSTATE_BV[i]=1 将导致 XRSTOR 触发 #NM 并使内核崩溃。例如,如果 fpu_update_guest_xfd() 设置 XFD 而未清除 XSTATE_BV:------------[ cut here ]------------ WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#29: amx_test/848 Modules linked in: kvm_intel kvm irqbypass CPU: 29 UID: 1000 PID: 848 Comm: amx_test Not tainted 6.19.0-rc2-ffa07f7fd437-x86_amx_nm_xfd_non_init-vm #171 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:exc_device_not_available+0x101/0x110 Call Trace: <TASK> asm_exc_device_not_available+0x1a/0x20 RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90 switch_fpu_return+0x4a/0xb0 kvm_arch_vcpu_ioctl_run+0x1245/0x1e40 [kvm] kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm] __x64_sys_ioctl+0x8f/0xd0 do_syscall_64+0x62/0x940 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]--- 如果 guest 执行 WRMSR(MSR_IA32_XFD) 将 XFD[18] 设置为 1,并且在 vmexit 处理程序调用 fpu_update_guest_xfd() 之前,主机 IRQ 触发了 kernel_fpu_begin(),就可能发生这种情况。并且如果用户空间通过 KVM_SET_XSAVE 填充 XSTATE_BV[i]=1:------------[ cut here ]------------ WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#14: amx_test/867 Modules linked in: kvm_intel kvm irqbypass CPU: 14 UID: 1000 PID: 867 Comm: amx_test Not tainted 6.19.0-rc2-2dace9faccd6-x86_amx_nm_xfd_non_init-vm #168 NONE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015 RIP: 0010:exc_device_not_available+0x101/0x110 Call Trace: <TASK> asm_exc_device_not_available+0x1a/0x20 RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90 fpu_swap_kvm_fpstate+0x6b/0x120 kvm_load_guest_fpu+0x30/0x80 [kvm] kvm_arch_vcpu_ioctl_run+0x85/0x1e40 [kvm] kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm] __x64_sys_ioctl+0x8f/0xd0 do_syscall_64+0x62/0x940 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]--- 新行为与 AMX 架构保持一致。根据 Intel 的 SDM,XSAVE 将 XFD 禁用的组件的 XSTATE_BV 保存为“0”(非压缩 XSAVE 保存状态组件的初始配置):如果 XSAVE、XSAVEC、XSAVEOPT 或 XSAVES 正在保存状态组件 i,当 XCR0[i] = IA32_XFD[i] = 1 时,指令不会生成 #NM;相反,它如同 XINUSE[i] = 0(且状态组件处于初始状态)一样运行:它将 XSAVE 头部的 XSTATE_BV 字段的第 i 位保存为 0;此外,XSAVE 保存状态组件的初始配置(其他指令不保存状态组件 i)。或者,KVM 可以始终使用 XFD=0 执行 XRSTOR,例如在为一个 struct fpu_guest 执行 XSAVE 时,基于已启用特性的集合使用常量 XFD。然而,XFD 禁用特性出现 XSTATE_BV[i]=1 的情况只可能发生在上述中断场景中,或涉及可抢占内核上抢占的类似场景中,因为 fpu_swap_kvm_fpstate() 调用 save_fpregs_to_fpstate() 时使用当前的 XFD 保存外发的 FPU 状态;而该 XFD(在除首次 WRMSR 到 XFD 之外的所有情况下)是 guest 的 XFD。因此,XFD 只可能在上
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。