[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/monitor: add support for descriptor access events
>>> On 20.03.17 at 20:21, <itopan@xxxxxxxxxxxxxxx> wrote: > On Fri, 17 Mar 2017 05:03:44 -0600 > "Jan Beulich" <JBeulich@xxxxxxxx> wrote: >> >>> On 10.03.17 at 16:50, <itopan@xxxxxxxxxxxxxxx> wrote: >> > + else >> > + { >> > + hvm_emulate_init_once(&ctxt, NULL, guest_cpu_user_regs()); >> > + rc = hvm_emulate_one(&ctxt); >> > + switch ( rc ) >> > + { >> > + case X86EMUL_UNHANDLEABLE: >> > + hvm_inject_hw_exception(TRAP_invalid_op, X86_EVENT_NO_EC); >> >> Is #UD the right exception here? In fact, is delivering an exception >> sensible in this case at all? > > Possibly not; it's how that case is handled elsewhere. For the given > set of instructions at least, X86EMUL_UNHANDLEABLE should only be > returnable due to some internal bug/error (e.g. invalid/unknown > HVMCOPY_* constant returned by hvm_fetch_from_guest_linear() or an > invalid selector passed to ->write_segment() etc.); what would be the > best way to handle that case? I think crashing the domain in such cases is better - injecting whatever non-architectural exception is only going to defer problems, making later analysis more difficult. >> > + hvm_descriptor_access_intercept(instr_info, exit_qualification, >> > descriptor, >> > + instr_id >= 2); >> >> instr_id & 2 (to be consistent with the other code. But anyway, even >> better would be to use manifest constants instead of all these literal >> numbers. > > (instr_id & 2) makes sense, but the 1 & 2 literals are unnamed criteria > inferred from the encoding to simplify the code, they don't have an > explicit meaning (at least in the Intel docs). I don't follow - if there are no names, you're free to give them names. I'm sure you and the VMX maintainers can agree on something suitable. >> > @@ -259,6 +261,24 @@ struct vm_event_mov_to_msr { >> > uint64_t value; >> > }; >> > >> > +#define VM_EVENT_DESC_INVALID 0 >> >> What is this good for? > > The default (uninitialized) value is given a semantic of "invalid" to > make potential problems due to incorrectly / incompletely initialized > or corrupted data more obvious No need to give it a name though, afaics - just start valid values at 1. > (I assume the .pad* fields are checked to > be 0 for the same reason). No, they're being checked so that later assigning them a meaning will be possible without breaking backwards compatibility. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |