Re: [PATCH 1/2] kvm: x86: Allow userspace to handle emulation errors

Jim Mattson
2021-04-21T16:31:59Z

On Tue, Apr 20, 2021 at 11:34 AM Sean Christopherson <seanjc@google.com> wrote:
>
> On Fri, Apr 16, 2021, Aaron Lewis wrote:
...
> > + vcpu->run->emulation_failure.suberror = KVM_INTERNAL_ERROR_EMULATION;
> > + vcpu->run->emulation_failure.ndata = 0;
> > + if (kvm->arch.exit_on_emulation_error && insn_size > 0) {
>
> I definitely think this should not be conditioned on exit_on_emulation_error.
>
> No need for "> 0", it's an unsigned value.

Unsigned doesn't imply non-zero. If insn_size is 0, then something is wrong.

...
> > + KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES;
> > + vcpu->run->emulation_failure.insn_size = insn_size;
> > + memcpy(vcpu->run->emulation_failure.insn_bytes,
> > + ctxt->fetch.data, sizeof(ctxt->fetch.data));
>
> Doesn't truly matter, but I think it's less confusing to copy over insn_size
> bytes.

Are you convinced that insn_size is always less than or equal to
sizeof(ctxt->fetch.data)? I'm not. It shouldn't be, of course, but
perhaps we should confirm that before copying insn_size bytes.