KVM: x86: avoid incorrect writes to host MSR_IA32_SPEC_CTRL
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 20 Jan 2020 15:33:06 +0000 (16:33 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 24 Jan 2020 08:18:47 +0000 (09:18 +0100)
commit6441fa6178f5456d1d4b512c08798888f99db185
treeba8f92990dbe7ba4e59d080e066163a50a9c0ded
parent4425f567b0dd2cb5ad2b16ce03a8951d0ccf935d
KVM: x86: avoid incorrect writes to host MSR_IA32_SPEC_CTRL

If the guest is configured to have SPEC_CTRL but the host does not
(which is a nonsensical configuration but these are not explicitly
forbidden) then a host-initiated MSR write can write vmx->spec_ctrl
(respectively svm->spec_ctrl) and trigger a #GP when KVM tries to
restore the host value of the MSR.  Add a more comprehensive check
for valid bits of SPEC_CTRL, covering host CPUID flags and,
since we are at it and it is more correct that way, guest CPUID
flags too.

For AMD, remove the unnecessary is_guest_mode check around setting
the MSR interception bitmap, so that the code looks the same as
for Intel.

Cc: Jim Mattson <jmattson@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm.c
arch/x86/kvm/vmx/vmx.c
arch/x86/kvm/x86.c
arch/x86/kvm/x86.h