KVM: x86: Breakpoints do not consider CS.base
x86 debug registers hold a linear address. Therefore, breakpoints detection should consider CS.base, and check whether instruction linear address equals (CS.base + RIP). This patch introduces a function to evaluate RIP linear address and uses it for breakpoints detection. Signed-off-by: Nadav Amit <namit@cs.technion.ac.il> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:

committed by
Paolo Bonzini

parent
7305eb5d8c
commit
82b32774c2
@@ -5118,9 +5118,7 @@ static int handle_dr(struct kvm_vcpu *vcpu)
|
||||
if (vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP) {
|
||||
vcpu->run->debug.arch.dr6 = vcpu->arch.dr6;
|
||||
vcpu->run->debug.arch.dr7 = dr7;
|
||||
vcpu->run->debug.arch.pc =
|
||||
vmcs_readl(GUEST_CS_BASE) +
|
||||
vmcs_readl(GUEST_RIP);
|
||||
vcpu->run->debug.arch.pc = kvm_get_linear_rip(vcpu);
|
||||
vcpu->run->debug.arch.exception = DB_VECTOR;
|
||||
vcpu->run->exit_reason = KVM_EXIT_DEBUG;
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user