CVE-2026-89932: KVM: nVMX: Always flush vpid02 on first use
In the Linux kernel, the following vulnerability has been resolved:
KVM: nVMX: Always flush vpid02 on first use
Make sure vpid02 is always flushed on first use by setting lastvpid=0 when allocating vpid02. nestedvmxtransitiontlbflush() will always detect a VPID change on first VM-Enter after VMXON, because VPID=0 in vmcs12 is not allowed if L1 enables VPID.
This avoids using stale TLB entries from a previous lifetime of the VPID, that might have been associated with a different vCPU (or a completely different VM).
Note that lastvpid is already being initialized as 0 when the vCPU is created, but it is not reset when vpid02 is freed on VMXOFF. Hence, the problem can only occur if L1 does VMXOFF -> VMXON, runs an L2, and KVM happens to reuse a VPID that has TLB entries on the physical CPU.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Ensure vpid02 is always flushed on first use by setting last_vpid=0 (last_vpid is initialized as 0 when the vCPU is created, but must be reset when vpid02 is freed on VMXOFF).
Linux kernel KVM (nVMX) last_vpid = 0
Event History
Frequently Asked Questions
What conditions are required for this issue to occur?
The issue requires nested VMX use: an L1 guest must perform VMXOFF followed by VMXON and then run an L2 guest. KVM must also reuse a VPID whose stale TLB entries remain on the physical CPU.
What data could be affected if the condition is triggered?
The L2 guest can use stale TLB entries from a prior lifetime of the reused VPID. Those entries may have belonged to a different vCPU or an entirely different VM.
Are systems that do not use nested virtualization exposed?
The described path depends on L1 performing VMXOFF and VMXON before running L2, so the issue applies to nested VMX operation. The provided information does not describe an impact path for systems that do not run an L2 guest.
How does the fix prevent stale translations from being used?
When vpid02 is allocated, the fix resets last_vpid to 0. This makes the first VM-Enter after VMXON detect a VPID change and flush vpid02 before it can use stale TLB entries.