Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0ad0b47 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

KVM: emulate: warn on invalid or uninitialized exception numbers



These were reported when running Jailhouse on AMD processors.

Initialize ctxt->exception.vector with an invalid exception number,
and warn if it remained invalid even though the emulator got
an X86EMUL_PROPAGATE_FAULT return code.

Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 592f0858
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -527,6 +527,7 @@ static unsigned long seg_base(struct x86_emulate_ctxt *ctxt, int seg)
static int emulate_exception(struct x86_emulate_ctxt *ctxt, int vec,
			     u32 error, bool valid)
{
	WARN_ON(vec > 0x1f);
	ctxt->exception.vector = vec;
	ctxt->exception.error_code = error;
	ctxt->exception.error_code_valid = valid;
@@ -4827,8 +4828,10 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
	ctxt->eip = ctxt->_eip;

done:
	if (rc == X86EMUL_PROPAGATE_FAULT)
	if (rc == X86EMUL_PROPAGATE_FAULT) {
		WARN_ON(ctxt->exception.vector > 0x1f);
		ctxt->have_exception = true;
	}
	if (rc == X86EMUL_INTERCEPTED)
		return EMULATION_INTERCEPTED;

+1 −0
Original line number Diff line number Diff line
@@ -5248,6 +5248,7 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu,

		ctxt->interruptibility = 0;
		ctxt->have_exception = false;
		ctxt->exception.vector = -1;
		ctxt->perm_ok = false;

		ctxt->ud = emulation_type & EMULTYPE_TRAP_UD;