diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2014-01-24 16:48:44 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-01-27 14:39:44 +0100 |
commit | 58cb628dbe24ce21b884729aebe15acb903dbfb5 (patch) | |
tree | 56355ea28e8f76fc0f933ae39d481ecb00a90a0b /arch/x86/kvm/cpuid.h | |
parent | b3af1e889ec4909f6b48dabd19a311d9c9f8d58e (diff) | |
download | linux-stable-58cb628dbe24ce21b884729aebe15acb903dbfb5.tar.gz linux-stable-58cb628dbe24ce21b884729aebe15acb903dbfb5.tar.bz2 linux-stable-58cb628dbe24ce21b884729aebe15acb903dbfb5.zip |
KVM: x86: Validate guest writes to MSR_IA32_APICBASE
Check for invalid state transitions on guest-initiated updates of
MSR_IA32_APICBASE. This address both enabling of the x2APIC when it is
not supported and all invalid transitions as described in SDM section
10.12.5. It also checks that no reserved bit is set in APICBASE by the
guest.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
[Use cpuid_maxphyaddr instead of guest_cpuid_get_phys_bits. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/cpuid.h')
-rw-r--r-- | arch/x86/kvm/cpuid.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h index f1e4895174b2..a2a1bb7ed8c1 100644 --- a/arch/x86/kvm/cpuid.h +++ b/arch/x86/kvm/cpuid.h @@ -72,4 +72,12 @@ static inline bool guest_cpuid_has_pcid(struct kvm_vcpu *vcpu) return best && (best->ecx & bit(X86_FEATURE_PCID)); } +static inline bool guest_cpuid_has_x2apic(struct kvm_vcpu *vcpu) +{ + struct kvm_cpuid_entry2 *best; + + best = kvm_find_cpuid_entry(vcpu, 1, 0); + return best && (best->ecx & bit(X86_FEATURE_X2APIC)); +} + #endif |