On 12/02/18 15:08, Alexandru Isaila wrote:
> @@ -2619,14 +2634,31 @@ void svm_vmexit_handler(struct cpu_user_regs *regs)
> case VMEXIT_EXCEPTION_BP:
> - if ( !v->domain->debugger_attached )
> - goto unexpected_exit_type;
> - /* AMD Vol2, 15.11: INT3, INTO, BOUND intercepts do not update RIP.
> - if ( (inst_len = __get_instruction_length(v, INSTR_INT3)) == 0 )
> + inst_len = __get_instruction_length(v, INSTR_INT3);
There are multiple ways of ending up with this vmexit, and INT3 is not
the only way.
The old code was somewhat broken (but only in the case that a debugger
was attached), but now with this introspection hook active, executing
`0xcd 0x03` will end up crashing the domain because of a length mismatch
looking for 0xcc.
You need to inspect EXITINTINFO to work out what went on here, and
distinguish INT3 from INT $3.
Can I suggest that you run this unit test
http://xenbits.xen.org/docs/xtf/test-swint-emulation.html under debug
introspection an check that you get all expected events? Every time we
touch this code, we seem to break it :(
Xen-devel mailing list