]> xenbits.xensource.com Git - xen.git/commitdiff
x86emul: only emulate software interrupt injection for real mode
authorJan Beulich <jbeulich@suse.com>
Tue, 23 Sep 2014 12:33:50 +0000 (14:33 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 23 Sep 2014 12:33:50 +0000 (14:33 +0200)
Protected mode emulation currently lacks proper privilege checking of
the referenced IDT entry, and there's currently no legitimate way for
any of the respective instructions to reach the emulator when the guest
is in protected mode.

This is XSA-106.

Reported-by: Andrei LUTAS <vlutas@bitdefender.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
xen/arch/x86/x86_emulate/x86_emulate.c

index 4810e6877cd1f38fff6ac9a93c94f75d5f3dc66e..5fbe0243fe1b6549417648420be53200bea3e4cb 100644 (file)
@@ -2634,6 +2634,7 @@ x86_emulate(
     case 0xcd: /* int imm8 */
         src.val = insn_fetch_type(uint8_t);
     swint:
+        fail_if(!in_realmode(ctxt, ops)); /* XSA-106 */
         fail_if(ops->inject_sw_interrupt == NULL);
         rc = ops->inject_sw_interrupt(src.val, _regs.eip - ctxt->regs->eip,
                                       ctxt) ? : X86EMUL_EXCEPTION;