[Bionic][SRU][PATCH 1/1] KVM: nVMX: Set LDTR to its architecturally defined value on nested VM-Exit
Po-Hsu Lin
po-hsu.lin at canonical.com
Wed Apr 6 04:36:21 UTC 2022
From: Sean Christopherson <seanjc at google.com>
BugLink: https://bugs.launchpad.net/bugs/1956315
Set L1's LDTR on VM-Exit per the Intel SDM:
The host-state area does not contain a selector field for LDTR. LDTR is
established as follows on all VM exits: the selector is cleared to
0000H, the segment is marked unusable and is otherwise undefined
(although the base address is always canonical).
This is likely a benign bug since the LDTR is unusable, as it means the
L1 VMM is conditioned to reload its LDTR in order to function properly on
bare metal.
Fixes: 4704d0befb07 ("KVM: nVMX: Exiting from L2 to L1")
Reviewed-by: Reiji Watanabe <reijiw at google.com>
Signed-off-by: Sean Christopherson <seanjc at google.com>
Message-Id: <20210713163324.627647-3-seanjc at google.com>
Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
(backported from commit afc8de0118be84f4058b9977d481aeb3e0758dbb)
[PHLin: make corresponding changes into vmx.c as it's missing the split to vmx/nested.c]
Signed-off-by: Po-Hsu Lin <po-hsu.lin at canonical.com>
---
arch/x86/kvm/vmx.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 3634ab6..fda0539 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -12003,6 +12003,10 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
};
vmx_set_segment(vcpu, &seg, VCPU_SREG_TR);
+ memset(&seg, 0, sizeof(seg));
+ seg.unusable = 1;
+ vmx_set_segment(vcpu, &seg, VCPU_SREG_LDTR);
+
kvm_set_dr(vcpu, 7, 0x400);
vmcs_write64(GUEST_IA32_DEBUGCTL, 0);
--
2.7.4
More information about the kernel-team
mailing list