[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/pv: Fix guest crashes following f75b1a5247b "x86/pv: Drop int80_bounce from struct pv_vcpu"
>>> On 14.03.18 at 12:51, <andrew.cooper3@xxxxxxxxxx> wrote: > The original init_int80_direct_trap() was in fact buggy; `int $0x80` is not > an > exception. This went unnoticed for years because int80_bounce and > trap_bounce > were separate structures, but were combined by this change. > > Exception handling is different to interrupt handling for PV guests. By > reusing trap_bounce, the following corner case can occur: > > * Handle a guest `int $0x80` instruction. Latches TBF_EXCEPTION into > trap_bounce. > * Handle an exception, which emulates to success (such as ptwr support), > which leaves trap_bounce unmodified. > * The exception exit path sees TBF_EXCEPTION set and re-injects the `int > $0x80` a second time. Oh, and then it was the clearing of trap_bounce after consuming it in your conversion to C which masked the problem? > --- a/xen/arch/x86/x86_64/entry.S > +++ b/xen/arch/x86/x86_64/entry.S > @@ -373,10 +373,10 @@ UNLIKELY_END(msi_check) > mov %cx, TRAPBOUNCE_cs(%rdx) > mov %rdi, TRAPBOUNCE_eip(%rdx) > > - /* TB_flags = TBF_EXCEPTION | (TI_GET_IF(ti) ? TBF_INTERRUPT : 0); */ > + /* TB_flags = (TI_GET_IF(ti) ? TBF_INTERRUPT : 0); */ > testb $4, 0x80 * TRAPINFO_sizeof + TRAPINFO_flags(%rsi) > setnz %cl > - lea TBF_EXCEPTION(, %rcx, TBF_INTERRUPT), %ecx > + lea (, %rcx, TBF_INTERRUPT), %ecx With the immediate gone I think shl $3, %ecx would be more readable and perhaps no worse code wise (the use of LEA was introduced in cases like this only to combine the shift with the ORing in of other flags). I won't insist on that change though (the more that there's no symbolic constant available for that literal 3 right now), so with or without it Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |