|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] vmx: Allow software (user defined) interrupts to be injected in to the guest
>>> On 20.04.12 at 07:04, Aravindh Puthiyaparambil <aravindh@xxxxxxxxxxxx>
>>> wrote:
> If xc_hvm_inject_trap() is called on a software (user defined) interrupt, it
> causes the guest to crash with a vmentry failure. The following patch fixes
> this issue.
>
> Signed-off-by: Aravindh Puthiyaparambil <aravindh@xxxxxxxxxxxx>
>
> diff -r 9036d6f974de -r f60377584f2d xen/arch/x86/hvm/vmx/vmx.c
> --- a/xen/arch/x86/hvm/vmx/vmx.c Thu Apr 19 21:55:51 2012 -0700
> +++ b/xen/arch/x86/hvm/vmx/vmx.c Thu Apr 19 22:01:50 2012 -0700
> @@ -1374,6 +1374,13 @@ void vmx_inject_hw_exception(int trap, i
>
> type = X86_EVENTTYPE_SW_EXCEPTION;
> __vmwrite(VM_ENTRY_INSTRUCTION_LEN, 1); /* int3 */
> + break;
> + default:
> + if ( trap > TRAP_last_reserved )
> + {
> + type = X86_EVENTTYPE_SW_EXCEPTION;
> + __vmwrite(VM_ENTRY_INSTRUCTION_LEN, 2); /* int imm8 */
I doubt this is generally correct, in particular for the use you appear
to desire: When the injection is not the result of an INT nn
instruction (which I would guess to be the case when coming from
libxc), you shouldn't set a non-zero instruction length. I believe this
is also wrong for the INT3 code above.
Additionally the problem should not be limited to injection coming
from libxc - injection originating from x86_emulate() should be
affected as much.
Jun, Eddie - I further wonder why #OF is not being handled according
to the documentation here either (should also result in
X86_EVENTTYPE_SW_EXCEPTION). And the fall-through from
TRAP_debug to TRAP_int3 is suspicious too (at the very minimum it
should be annotated with a comment saying why fall-through is
intended here). Nor does the documentation state that TRAP_debug
should ever result in X86_EVENTTYPE_SW_EXCEPTION.
Finally, the whole injection logic (including the patch here) doesn't
appear to cope with INT nn being used by a guest with nn < 32, nor
with any (pointless) prefixes used on INT3 or INT nn.
Jan
> + }
> }
>
> if ( unlikely(intr_info & INTR_INFO_VALID_MASK) &&
> diff -r 9036d6f974de -r f60377584f2d xen/include/asm-x86/processor.h
> --- a/xen/include/asm-x86/processor.h Thu Apr 19 21:55:51 2012 -0700
> +++ b/xen/include/asm-x86/processor.h Thu Apr 19 22:01:50 2012 -0700
> @@ -111,6 +111,7 @@
> #define TRAP_alignment_check 17
> #define TRAP_machine_check 18
> #define TRAP_simd_error 19
> +#define TRAP_last_reserved 31
>
> /* Set for entry via SYSCALL. Informs return code to use SYSRETQ not IRETQ.
> */
> /* NB. Same as VGCF_in_syscall. No bits in common with any other TRAP_
> defn. */
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |