KVM: x86: virtualize cpuid faulting
[linux-2.6-block.git] / arch / x86 / kvm / cpuid.c
index 1d155cc56629a78ac2465c4772170a37a9314ce4..a181ae76c71ce102f88f6a4ee9cc3233677c55e2 100644 (file)
@@ -16,6 +16,8 @@
 #include <linux/export.h>
 #include <linux/vmalloc.h>
 #include <linux/uaccess.h>
+#include <linux/sched/stat.h>
+
 #include <asm/processor.h>
 #include <asm/user.h>
 #include <asm/fpu/xstate.h>
@@ -874,6 +876,9 @@ int kvm_emulate_cpuid(struct kvm_vcpu *vcpu)
 {
        u32 eax, ebx, ecx, edx;
 
+       if (cpuid_fault_enabled(vcpu) && !kvm_require_cpl(vcpu, 0))
+               return 1;
+
        eax = kvm_register_read(vcpu, VCPU_REGS_RAX);
        ecx = kvm_register_read(vcpu, VCPU_REGS_RCX);
        kvm_cpuid(vcpu, &eax, &ebx, &ecx, &edx);