The vulnerability lives in the KVM_TDX_INIT_VM ioctl path, specifically in how the cpuid.nent field is used twice with an intervening userspace-controlled mutation window. The code reads nent to size a cpuid_entries allocation, then copies the userspace-provided nent value and uses it as an array bound during subsequent parsing. Because the ioctl handler permits concurrent invocations on the same file descriptor, userspace can mutate nent between the allocation-sizing read and the copy operation that feeds the bounds check. The result is an out-of-bounds read in kernel memory.
The fix adds a consistency check: the copied cpuid.nent must match the value used for sizing the allocation. This closes the specific TOCTOU, but it doesn't harden the underlying initialization contract. The broader pattern — multi-step ioctl initialization where size-dependent allocations precede input parsing — appears in other KVM paths, particularly in SEV and other confidential computing extensions.
For defenders, the practical questions break down into immediate and horizon concerns. Immediately: audit any KVM ioctl handlers that perform allocation sizing based on userspace-provided counts, then subsequently parse userspace buffers using those same counts as bounds. The TDX case is the canonical example, but the pattern is structural. Second, recognize that the trigger condition requires a malicious or compromised hypervisor management stack (QEMU, libvirt, or cloud orchestration tooling) — this isn't a guest-to-host escape vector, it's a failure mode within the control plane that could corrupt state shared across all VMs on a host.
The EPSS score of 0.00154 reflects current TDX deployment constraints rather than theoretical exploitability. As confidential computing adoption broadens into environments where the hypervisor may be adversarial — not just the VM — this class of initialization race warrants re-scoring. The kernel's CVE history shows this exact pattern recurs: a minimal consistency check fixes the observed failure while adjacent fields in the same structure remain implicitly trusted. Treat each instance as a signal to audit the pattern, not just the specific instance.