lkml.org 
[lkml]   [2010]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[150/289] KVM: Correct ordering of ldt reload wrt fs/gs reload
    2.6.36-stable review patch.  If anyone has any objections, please let us 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>

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

    --- a/arch/x86/kvm/svm.c
    +++ b/arch/x86/kvm/svm.c
    @@ -3281,6 +3281,7 @@ static void svm_vcpu_run(struct kvm_vcpu
    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);
    @@ -3288,7 +3289,6 @@ static void svm_vcpu_run(struct kvm_vcpu
    #else
    loadsegment(gs, gs_selector);
    #endif
    - kvm_load_ldt(ldt_selector);

    reload_tss(vcpu);

    --- a/arch/x86/kvm/vmx.c
    +++ b/arch/x86/kvm/vmx.c
    @@ -846,8 +846,6 @@ static void __vmx_load_host_state(struct

    ++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
    @@ -857,6 +855,8 @@ static void __vmx_load_host_state(struct
    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: 2010-12-08 02:35    [W:4.204 / U:0.164 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site