• Sean Christopherson's avatar
    KVM: x86: Report error when setting CPUID if Hyper-V allocation fails · 3be29eb7
    Sean Christopherson authored
    Return -ENOMEM back to userspace if allocating the Hyper-V vCPU struct
    fails when enabling Hyper-V in guest CPUID.  Silently ignoring failure
    means that KVM will not have an up-to-date CPUID cache if allocating the
    struct succeeds later on, e.g. when activating SynIC.
    
    Rejecting the CPUID operation also guarantess that vcpu->arch.hyperv is
    non-NULL if hyperv_enabled is true, which will allow for additional
    cleanup, e.g. in the eVMCS code.
    
    Note, the initialization needs to be done before CPUID is set, and more
    subtly before kvm_check_cpuid(), which potentially enables dynamic
    XFEATURES.  Sadly, there's no easy way to avoid exposing Hyper-V details
    to CPUID or vice versa.  Expose kvm_hv_vcpu_init() and the Hyper-V CPUID
    signature to CPUID instead of exposing cpuid_entry2_find() outside of
    CPUID code.  It's hard to envision kvm_hv_vcpu_init() being misused,
    whereas cpuid_entry2_find() absolutely shouldn't be used outside of core
    CPUID cod...
    3be29eb7
cpuid.c 41.7 KB