KVM: fix load_guest_segment_descriptor() to return X86EMUL_*

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Friday, March 5, 2010 - 3:00 pm

Gitweb:     http://git.kernel.org/linus/c125c607326928001983f51109c3d0c190f0a8bb
Commit:     c125c607326928001983f51109c3d0c190f0a8bb
Parent:     ab9f4ecbb6d39a18e300a0d10a4968c37404aa76
Author:     Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
AuthorDate: Mon Feb 1 22:11:04 2010 +0900
Committer:  Marcelo Tosatti <mtosatti@redhat.com>
CommitDate: Mon Mar 1 12:36:07 2010 -0300

    KVM: fix load_guest_segment_descriptor() to return X86EMUL_*
    
    This patch fixes load_guest_segment_descriptor() to return
    X86EMUL_PROPAGATE_FAULT when it tries to access the descriptor
    table beyond the limit of it: suggested by Marcelo.
    
    I have checked current callers of this helper function,
      - kvm_load_segment_descriptor()
      - kvm_task_switch()
    and confirmed that this patch will change nothing in the
    upper layers if we do not change the handling of this
    return value from load_guest_segment_descriptor().
    
    Next step: Although fixing the kvm_task_switch() to handle the
    propagated faults properly seems difficult, and maybe not worth
    it because TSS is not used commonly these days, we can fix
    kvm_load_segment_descriptor(). By doing so, the injected #GP
    becomes possible to be handled by the guest. The only problem
    for this is how to differentiate this fault from the page faults
    generated by kvm_read_guest_virt(). We may have to split this
    function to achive this goal.
    
    Signed-off-by: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
    Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
---
 arch/x86/kvm/x86.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 0bf3df5..01f0b03 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -4663,7 +4663,7 @@ static int load_guest_segment_descriptor(struct kvm_vcpu *vcpu, u16 selector,
 
 	if (dtable.limit < index * 8 + 7) {
 		kvm_queue_exception_e(vcpu, GP_VECTOR, selector & 0xfffc);
-		return 1;
+		return X86EMUL_PROPAGATE_FAULT;
 	}
 	return kvm_read_guest_virt(dtable.base + index*8, seg_desc, sizeof(*seg_desc), vcpu);
 }
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
KVM: fix load_guest_segment_descriptor() to return X86EMUL_*, Linux Kernel Mailing ..., (Fri Mar 5, 3:00 pm)