• Paolo Bonzini's avatar
    KVM: SVM: move MSR_IA32_SPEC_CTRL save/restore to assembly · 9f2febf3
    Paolo Bonzini authored
    Restoration of the host IA32_SPEC_CTRL value is probably too late
    with respect to the return thunk training sequence.
    
    With respect to the user/kernel boundary, AMD says, "If software chooses
    to toggle STIBP (e.g., set STIBP on kernel entry, and clear it on kernel
    exit), software should set STIBP to 1 before executing the return thunk
    training sequence." I assume the same requirements apply to the guest/host
    boundary. The return thunk training sequence is in vmenter.S, quite close
    to the VM-exit. On hosts without V_SPEC_CTRL, however, the host's
    IA32_SPEC_CTRL value is not restored until much later.
    
    To avoid this, move the restoration of host SPEC_CTRL to assembly and,
    for consistency, move the restoration of the guest SPEC_CTRL as well.
    This is not particularly difficult, apart from some care to cover both
    32- and 64-bit, and to share code between SEV-ES and normal vmentry.
    
    Cc: stable@vger.kernel.org
    Fixes: a149180f ("x86: Add magic AMD return-thunk")
    Suggested-by: default avatarJim Mattson <jmattson@google.com>
    Reviewed-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    9f2febf3
bugs.c 70.2 KB