Skip to contentSkip to conversation

KVM: nVMX: correctly set tr base on nested vmexit emulation

PATCH Applied Gleb Natapov 4 participants 5 messages Aug 4, 2013 – Aug 7, 2013

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 KVM: nVMX: correctly set tr base on nested vmexit emulation

After commit 21feb4eb64e21f8dc91136b91ee886b978ce6421 tr base is zeroed during vmexit. Set it to L1's HOST_TR_BASE. This should fix
https://bugzilla.kernel.org/show_bug.cgi?id=60679

arch/x86/kvm/vmx.c +1 -1
index b533cf8..7d31e7b 100644
@@ -8261,7 +8261,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
 	seg.base = vmcs12->host_gs_base;
 	vmx_set_segment(vcpu, &seg, VCPU_SREG_GS);
 	seg = (struct kvm_segment) {
-		.base = 0,
+		.base = vmcs12->host_tr_base,
 		.limit = 0x67,
 		.selector = vmcs12->host_tr_selector,
 		.type = 11,

--
Gleb.

Reviewed-by on v1 1/1
#1 lore raw

Yes, I have just retraced and found the bug. This is my negligence.

Quoted 20 lines · Gleb Natapov

After commit 21feb4eb64e21f8dc91136b91ee886b978ce6421 tr base is zeroed during vmexit. Set it to L1's HOST_TR_BASE. This should fix
https://bugzilla.kernel.org/show_bug.cgi?id=60679

arch/x86/kvm/vmx.c +1 -2
index b533cf8..7d31e7b 100644
@@ -8261,7 +8261,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
        seg.base = vmcs12->host_gs_base;
        vmx_set_segment(vcpu, &seg, VCPU_SREG_GS);
        seg = (struct kvm_segment) {
-               .base = 0,
+               .base = vmcs12->host_tr_base,
                .limit = 0x67,
                .selector = vmcs12->host_tr_selector,
                .type = 11,
--
                        Gleb.
Signature · 5 lines
Arthur Chunqi Li
Department of Computer Science
School of EECS
Peking University
Beijing, China
#2 lore raw
Quoted 2 lines · Arthur Chunqi Li

Yes, I have just retraced and found the bug. This is my negligence.

Reviewers could have done a better job too :)

Quoted 7 lines
Quoted 4 lines · Gleb Natapov

After commit 21feb4eb64e21f8dc91136b91ee886b978ce6421 tr base is zeroed during vmexit. Set it to L1's HOST_TR_BASE. This should fix
https://bugzilla.kernel.org/show_bug.cgi?id=60679

Quoted 25 lines
Quoted 16 lines
arch/x86/kvm/vmx.c +1 -2
index b533cf8..7d31e7b 100644
@@ -8261,7 +8261,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
        seg.base = vmcs12->host_gs_base;
        vmx_set_segment(vcpu, &seg, VCPU_SREG_GS);
        seg = (struct kvm_segment) {
-               .base = 0,
+               .base = vmcs12->host_tr_base,
                .limit = 0x67,
                .selector = vmcs12->host_tr_selector,
                .type = 11,
--
                        Gleb.
Signature · 5 lines
Arthur Chunqi Li
Department of Computer Science
School of EECS
Peking University
Beijing, China

--
Gleb.

Tested-by on v1 1/1
#3 lore raw
In reply to Gleb Natapov
Quoted 8 lines

-----Original Message-----
From: Gleb Natapov [mailto:[email protected]]
Sent: Sunday, August 04, 2013 8:08 PM
To: [email protected]
Cc: Ren, Yongjie; [email protected]; [email protected]
Subject: [PATCH] KVM: nVMX: correctly set tr base on nested vmexit emulation

Quoted 5 lines

After commit 21feb4eb64e21f8dc91136b91ee886b978ce6421 tr base is zeroed
during vmexit. Set it to L1's HOST_TR_BASE. This should fix
https://bugzilla.kernel.org/show_bug.cgi?id=60679

Yes, your patch can fix this bug I reported.

Quoted 17 lines
arch/x86/kvm/vmx.c +1 -1
index b533cf8..7d31e7b 100644
@@ -8261,7 +8261,7 @@ static void load_vmcs12_host_state(struct
 kvm_vcpu *vcpu,
 	seg.base = vmcs12->host_gs_base;
 	vmx_set_segment(vcpu, &seg, VCPU_SREG_GS);
 	seg = (struct kvm_segment) {
-		.base = 0,
+		.base = vmcs12->host_tr_base,
 		.limit = 0x67,
 		.selector = vmcs12->host_tr_selector,

.type = 11,
--
Gleb.

maintainer Applied
#4 lore raw
In reply to Gleb Natapov
Quoted 19 lines · Gleb Natapov

After commit 21feb4eb64e21f8dc91136b91ee886b978ce6421 tr base is zeroed during vmexit. Set it to L1's HOST_TR_BASE. This should fix
https://bugzilla.kernel.org/show_bug.cgi?id=60679

arch/x86/kvm/vmx.c +1 -2
index b533cf8..7d31e7b 100644
@@ -8261,7 +8261,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
  	seg.base = vmcs12->host_gs_base;
  	vmx_set_segment(vcpu, &seg, VCPU_SREG_GS);
  	seg = (struct kvm_segment) {
-		.base = 0,
+		.base = vmcs12->host_tr_base,
  		.limit = 0x67,
  		.selector = vmcs12->host_tr_selector,
  		.type = 11,
--
Quoted 6 lines

Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

Applied, thanks.

Paolo