lkml.org 
[lkml]   [2011]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] [273/275] KVM: Correct ordering of ldt reload wrt fs/gs reload
Date
2.6.35-longterm review patch.  If anyone has any objections, please let me know.

------------------
From: Avi Kivity <avi@redhat.com>

commit 0a77fe4c188e25917799f2356d4aa5e6d80c39a2 upstream.

If fs or gs refer to the ldt, they must be reloaded after the ldt. Reorder
the code to that effect.

Userspace code that uses the ldt with kvm is nonexistent, so this doesn't fix
a user-visible bug.

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Andi Kleen <ak@linux.intel.com>

---
arch/x86/kvm/svm.c | 2 +-
arch/x86/kvm/vmx.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6.35.y/arch/x86/kvm/svm.c
===================================================================
--- linux-2.6.35.y.orig/arch/x86/kvm/svm.c 2011-03-29 23:53:08.796312600 -0700
+++ linux-2.6.35.y/arch/x86/kvm/svm.c 2011-03-29 23:53:15.697136026 -0700
@@ -3185,6 +3185,7 @@
vcpu->arch.regs[VCPU_REGS_RIP] = svm->vmcb->save.rip;

load_host_msrs(vcpu);
+ kvm_load_ldt(ldt_selector);
loadsegment(fs, fs_selector);
#ifdef CONFIG_X86_64
load_gs_index(gs_selector);
@@ -3192,7 +3193,6 @@
#else
loadsegment(gs, gs_selector);
#endif
- kvm_load_ldt(ldt_selector);

reload_tss(vcpu);

Index: linux-2.6.35.y/arch/x86/kvm/vmx.c
===================================================================
--- linux-2.6.35.y.orig/arch/x86/kvm/vmx.c 2011-03-29 23:53:08.868310757 -0700
+++ linux-2.6.35.y/arch/x86/kvm/vmx.c 2011-03-29 23:53:32.094716453 -0700
@@ -789,8 +789,6 @@

++vmx->vcpu.stat.host_state_reload;
vmx->host_state.loaded = 0;
- if (vmx->host_state.fs_reload_needed)
- loadsegment(fs, vmx->host_state.fs_sel);
if (vmx->host_state.gs_ldt_reload_needed) {
kvm_load_ldt(vmx->host_state.ldt_sel);
#ifdef CONFIG_X86_64
@@ -800,6 +798,8 @@
loadsegment(gs, vmx->host_state.gs_sel);
#endif
}
+ if (vmx->host_state.fs_reload_needed)
+ loadsegment(fs, vmx->host_state.fs_sel);
reload_tss();
#ifdef CONFIG_X86_64
if (is_long_mode(&vmx->vcpu)) {

\
 
 \ /
  Last update: 2011-03-30 23:15    [W:1.159 / U:0.696 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site