KVM: x86: Warn on zero-size save state for valid CPUID 0xD.N sub-leaf

WARN if the save state size for a valid XCR0-managed sub-leaf is zero,
which would indicate a KVM or CPU bug.  Add a comment to explain why KVM
WARNs so the reader doesn't have to tease out the relevant bits from
Intel's SDM and KVM's XCR0/XSS code.

Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Sean Christopherson 2020-03-02 15:56:11 -08:00 committed by Paolo Bonzini
parent 1893c9415a
commit 91001d403a
1 changed files with 10 additions and 3 deletions

View File

@ -677,10 +677,17 @@ static inline int __do_cpuid_func(struct kvm_cpuid_entry2 *entry, u32 function,
goto out;
do_host_cpuid(&entry[i], function, idx);
if (entry[i].eax == 0)
continue;
if (WARN_ON_ONCE(entry[i].ecx & 1))
/*
* The @supported check above should have filtered out
* invalid sub-leafs as well as sub-leafs managed by
* IA32_XSS MSR. Only XCR0-managed sub-leafs should
* reach this point, and they should have a non-zero
* save state size.
*/
if (WARN_ON_ONCE(!entry[i].eax || (entry[i].ecx & 1)))
continue;
entry[i].ecx = 0;
entry[i].edx = 0;
++*nent;