lkml.org 
[lkml]   [2019]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.1 299/371] KVM: nVMX: Always sync GUEST_BNDCFGS when it comes from vmcs01
    Date
    From: Sean Christopherson <sean.j.christopherson@intel.com>

    commit 3b013a2972d5bc344d6eaa8f24fdfe268211e45f upstream.

    If L1 does not set VM_ENTRY_LOAD_BNDCFGS, then L1's BNDCFGS value must
    be propagated to vmcs02 since KVM always runs with VM_ENTRY_LOAD_BNDCFGS
    when MPX is supported. Because the value effectively comes from vmcs01,
    vmcs02 must be updated even if vmcs12 is clean.

    Fixes: 62cf9bd8118c4 ("KVM: nVMX: Fix emulation of VM_ENTRY_LOAD_BNDCFGS")
    Cc: stable@vger.kernel.org
    Cc: Liran Alon <liran.alon@oracle.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kvm/vmx/nested.c | 13 ++++++-------
    1 file changed, 6 insertions(+), 7 deletions(-)

    --- a/arch/x86/kvm/vmx/nested.c
    +++ b/arch/x86/kvm/vmx/nested.c
    @@ -2243,13 +2243,9 @@ static void prepare_vmcs02_full(struct v

    set_cr4_guest_host_mask(vmx);

    - if (kvm_mpx_supported()) {
    - if (vmx->nested.nested_run_pending &&
    - (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_BNDCFGS))
    - vmcs_write64(GUEST_BNDCFGS, vmcs12->guest_bndcfgs);
    - else
    - vmcs_write64(GUEST_BNDCFGS, vmx->nested.vmcs01_guest_bndcfgs);
    - }
    + if (kvm_mpx_supported() && vmx->nested.nested_run_pending &&
    + (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_BNDCFGS))
    + vmcs_write64(GUEST_BNDCFGS, vmcs12->guest_bndcfgs);
    }

    /*
    @@ -2292,6 +2288,9 @@ static int prepare_vmcs02(struct kvm_vcp
    kvm_set_dr(vcpu, 7, vcpu->arch.dr7);
    vmcs_write64(GUEST_IA32_DEBUGCTL, vmx->nested.vmcs01_debugctl);
    }
    + if (kvm_mpx_supported() && (!vmx->nested.nested_run_pending ||
    + !(vmcs12->vm_entry_controls & VM_ENTRY_LOAD_BNDCFGS)))
    + vmcs_write64(GUEST_BNDCFGS, vmx->nested.vmcs01_guest_bndcfgs);
    vmx_set_rflags(vcpu, vmcs12->guest_rflags);

    /* EXCEPTION_BITMAP and CR0_GUEST_HOST_MASK should basically be the

    \
     
     \ /
      Last update: 2019-07-24 22:39    [W:4.097 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site