KVM: VMX: Fix DR6 update on #DB exception
authorJan Kiszka <jan.kiszka@siemens.com>
Sat, 4 Jan 2014 17:47:17 +0000 (18:47 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 17 Jan 2014 09:22:12 +0000 (10:22 +0100)
According to the SDM, only bits 0-3 of DR6 "may" be cleared by "certain"
debug exception. So do update them on #DB exception in KVM, but leave
the rest alone, only setting BD and BS in addition to already set bits
in DR6. This also aligns us with kvm_vcpu_check_singlestep.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx.c

index 79b360e..c8eb27f 100644 (file)
@@ -4869,7 +4869,8 @@ static int handle_exception(struct kvm_vcpu *vcpu)
                dr6 = vmcs_readl(EXIT_QUALIFICATION);
                if (!(vcpu->guest_debug &
                      (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))) {
-                       vcpu->arch.dr6 = dr6 | DR6_FIXED_1;
+                       vcpu->arch.dr6 &= ~15;
+                       vcpu->arch.dr6 |= dr6;
                        kvm_queue_exception(vcpu, DB_VECTOR);
                        return 1;
                }