lkml.org 
[lkml]   [2010]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[194/197] KVM: x86: Fix TSS size check for 16-bit tasks
    2.6.32-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Jan Kiszka <jan.kiszka@siemens.com>

    (Cherry-picked from commit e8861cfe2c75bdce36655b64d7ce02c2b31b604d)

    A 16-bit TSS is only 44 bytes long. So make sure to test for the correct
    size on task switch.

    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Avi Kivity <avi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    arch/x86/kvm/x86.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -4543,6 +4543,7 @@ int kvm_task_switch(struct kvm_vcpu *vcp
    int ret = 0;
    u32 old_tss_base = get_segment_base(vcpu, VCPU_SREG_TR);
    u16 old_tss_sel = get_segment_selector(vcpu, VCPU_SREG_TR);
    + u32 desc_limit;

    old_tss_base = kvm_mmu_gva_to_gpa_write(vcpu, old_tss_base, NULL);

    @@ -4565,7 +4566,10 @@ int kvm_task_switch(struct kvm_vcpu *vcp
    }
    }

    - if (!nseg_desc.p || get_desc_limit(&nseg_desc) < 0x67) {
    + desc_limit = get_desc_limit(&nseg_desc);
    + if (!nseg_desc.p ||
    + ((desc_limit < 0x67 && (nseg_desc.type & 8)) ||
    + desc_limit < 0x2b)) {
    kvm_queue_exception_e(vcpu, TS_VECTOR, tss_selector & 0xfffc);
    return 1;
    }



    \
     
     \ /
      Last update: 2010-04-22 21:35    [W:5.059 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site