Re: [PATCH 0/3] KVM: x86: clear HF_SMM_MASK before loading state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/04/19 17:03, Sean Christopherson wrote:
> RSM emulation is currently broken on VMX when the interrupted guest has
> CR4.VMXE=1.  Similar breakage has also occurred in the past due to
> HF_SMM_MASK being cleared only after RSM completes, i.e. loading non-SMM
> state while is_smm() returns true is unsurprisingly problematic.
> 
> Rather than dance around the issue of HF_SMM_MASK being set when loading
> SMSTATE into architectural state, rework RSM emulation itself to clear
> HF_SMM_MASK prior to loading architectural state.   AFAICT, the only
> motivation for having HF_SMM_MASK set throughout is so that the memory
> access from GET_SMSTATE() are tagged with role.smm (though arguably even
> that is unnecessary).  Sidestep that particular issue by taking the
> enter_smm() approach of reading all of SMSTATE into a buffer and then
> loading state from the buffer.
> 
> The actual fix is the same concept as an earlier RFC, but without first
> moving em_rsm() to x86.c, i.e. doesn't add a big pile of dependent patches
> before fixing the bug.  I'm still planning on sending a series to move
> the bulk of em_rsm() to x86.c, but it'll be a true cleanup.
> 
> [1] https://patchwork.kernel.org/cover/10875623/
> 
> Sean Christopherson (3):
>   KVM: x86: Load SMRAM in a single shot when leaving SMM
>   KVM: x86: Open code kvm_set_hflags
>   KVM: x86: clear SMM flags before loading state while leaving SMM
> 
>  arch/x86/include/asm/kvm_emulate.h |   4 +-
>  arch/x86/include/asm/kvm_host.h    |   5 +-
>  arch/x86/kvm/emulate.c             | 160 +++++++++++++++--------------
>  arch/x86/kvm/svm.c                 |  30 ++----
>  arch/x86/kvm/vmx/vmx.c             |   4 +-
>  arch/x86/kvm/x86.c                 |  38 ++++---
>  6 files changed, 118 insertions(+), 123 deletions(-)
> 

Queued, thanks.  I only changed the name of the emulator callback from
smm_changed to post_leave_smm, since it is invoked only on RSM.

Paolo



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux