KVM: X86: Reset vcpu->arch.cpuid_nent to 0 if SET_CPUID* fails
Current implementation keeps userspace input of CPUID configuration and cpuid->nent even if kvm_update_cpuid() fails. Reset vcpu->arch.cpuid_nent to 0 for the case of failure as a simple fix. Besides, update the doc to explicitly state that if IOCTL SET_CPUID* fail KVM gives no gurantee that previous valid CPUID configuration is kept. Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> Message-Id: <20200708065054.19713-2-xiaoyao.li@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
2e8cd7a3b8
commit
1896409282
|
@ -669,6 +669,10 @@ MSRs that have been set successfully.
|
|||
Defines the vcpu responses to the cpuid instruction. Applications
|
||||
should use the KVM_SET_CPUID2 ioctl if available.
|
||||
|
||||
Note, when this IOCTL fails, KVM gives no guarantees that previous valid CPUID
|
||||
configuration (if there is) is not corrupted. Userspace can get a copy of the
|
||||
resulting CPUID configuration through KVM_GET_CPUID2 in case.
|
||||
|
||||
::
|
||||
|
||||
struct kvm_cpuid_entry {
|
||||
|
|
|
@ -209,6 +209,8 @@ int kvm_vcpu_ioctl_set_cpuid(struct kvm_vcpu *vcpu,
|
|||
kvm_apic_set_version(vcpu);
|
||||
kvm_x86_ops.cpuid_update(vcpu);
|
||||
r = kvm_update_cpuid(vcpu);
|
||||
if (r)
|
||||
vcpu->arch.cpuid_nent = 0;
|
||||
|
||||
kvfree(cpuid_entries);
|
||||
out:
|
||||
|
@ -232,6 +234,8 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
|
|||
kvm_apic_set_version(vcpu);
|
||||
kvm_x86_ops.cpuid_update(vcpu);
|
||||
r = kvm_update_cpuid(vcpu);
|
||||
if (r)
|
||||
vcpu->arch.cpuid_nent = 0;
|
||||
out:
|
||||
return r;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue