• Maxim Levitsky's avatar
    kvm: x86: replace kvm_spec_ctrl_test_value with runtime test on the host · 841c2be0
    Maxim Levitsky authored
    To avoid complex and in some cases incorrect logic in
    kvm_spec_ctrl_test_value, just try the guest's given value on the host
    processor instead, and if it doesn't #GP, allow the guest to set it.
    
    One such case is when host CPU supports STIBP mitigation
    but doesn't support IBRS (as is the case with some Zen2 AMD cpus),
    and in this case we were giving guest #GP when it tried to use STIBP
    
    The reason why can can do the host test is that IA32_SPEC_CTRL msr is
    passed to the guest, after the guest sets it to a non zero value
    for the first time (due to performance reasons),
    and as as result of this, it is pointless to emulate #GP condition on
    this first access, in a different way than what the host CPU does.
    
    This is based on a patch from Sean Christopherson, who suggested this idea.
    
    Fixes: 6441fa61 ("KVM: x86: avoid incorrect writes to host MSR_IA32_SPEC_CTRL")
    Cc: stable@vger.kernel.org
    Suggested-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: default avatarMaxim Levitsky <mlevitsk@redhat.com>
    Message-Id: <20200708115731.180097-1-mlevitsk@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    841c2be0
svm.c 108 KB