KVM: VMX: Advance rip to after an ICEBP instruction
authorHuw Davies <huw@codeweavers.com>
Wed, 16 Apr 2014 09:02:51 +0000 (10:02 +0100)
committerMarcelo Tosatti <mtosatti@redhat.com>
Tue, 22 Apr 2014 21:37:43 +0000 (18:37 -0300)
When entering an exception after an ICEBP, the saved instruction
pointer should point to after the instruction.

This fixes the bug here: https://bugs.launchpad.net/qemu/+bug/1119686

Signed-off-by: Huw Davies <huw@codeweavers.com>
Reviewed-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/vmx.c

index eb3f2b1b764c486ede13994e71e7a1802abf72df..8fb56e4cdf918618bf06891fd820fac82c7be6ef 100644 (file)
@@ -4841,6 +4841,9 @@ static int handle_exception(struct kvm_vcpu *vcpu)
                      (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))) {
                        vcpu->arch.dr6 &= ~15;
                        vcpu->arch.dr6 |= dr6;
+                       if (!(dr6 & ~DR6_RESERVED)) /* icebp */
+                               skip_emulated_instruction(vcpu);
+
                        kvm_queue_exception(vcpu, DB_VECTOR);
                        return 1;
                }