[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] x86/vtx: Fix fault semantics for early task switch failures
On 22.11.2019 14:12, Andrew Cooper wrote: > On 22/11/2019 13:08, Jan Beulich wrote: >> On 22.11.2019 13:37, Roger Pau Monné wrote: >>> On Thu, Nov 21, 2019 at 10:15:50PM +0000, Andrew Cooper wrote: >>>> The VT-x task switch handler adds inst_len to rip before calling >>>> hvm_task_switch(). This causes early faults to be delivered to the guest >>>> with >>>> trap semantics, and break restartibility. >>>> >>>> Instead, pass the instruction length into hvm_task_switch() and write it >>>> into >>>> the outgoing tss only, leaving rip in its original location. >>>> >>>> For now, pass 0 on the SVM side. This highlights a separate preexisting >>>> bug >>>> which will be addressed in the following patch. >>>> >>>> While adjusting call sites, drop the unnecessary uint16_t cast. >>>> >>>> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> >>> Code LGTM: >>> >>> Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> >> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> > > It occurs to me that this also fixes a vmentry failure in the corner > case that an instruction, which crosses the 4G=>0 boundary takes a > fault. %rip will be adjusted without being truncated. I was about to say so in my earlier reply, until I paid attention to this @@ -2987,7 +2987,7 @@ void hvm_task_switch( if ( taskswitch_reason == TSW_iret ) eflags &= ~X86_EFLAGS_NT; - tss.eip = regs->eip; + tss.eip = regs->eip + insn_len; together with the subsequent regs->rip = tss.eip; already having taken care of this aspect before, afaict. 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 |