[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 4/4] xen/arm: Don't crash the domain on invalid HVC immediate
Hi, On 02/02/18 10:14, Julien Grall wrote: > domain_crash_synchronous() should only be used when something went wrong > in Xen. It is better to inject to the guest as it will be in a better > position to provide helpful information (stack trace...). > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> > Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > > --- > > We potentially want to return -1 instead. This would make Xen more > future-proof if we decide to implement the other HVC immediate. > > Changes in v2: > - Add Stefano's reviewed-by > --- > xen/arch/arm/traps.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c > index 1e85f99ec1..1cba7e584d 100644 > --- a/xen/arch/arm/traps.c > +++ b/xen/arch/arm/traps.c > @@ -1471,14 +1471,17 @@ static void do_debug_trap(struct cpu_user_regs *regs, > unsigned int code) > #endif > > static void do_trap_hypercall(struct cpu_user_regs *regs, register_t *nr, > - unsigned long iss) > + const union hsr hsr) > { > arm_hypercall_fn_t call = NULL; > > BUILD_BUG_ON(NR_hypercalls < ARRAY_SIZE(arm_hypercall_table) ); > > - if ( iss != XEN_HYPERCALL_TAG ) > - domain_crash_synchronous(); > + if ( hsr.iss != XEN_HYPERCALL_TAG ) > + { > + gprintk(XENLOG_WARNING, "Invalid HVC imm 0x%x\n", hsr.iss); > + return inject_undef_exception(regs, hsr); Why is this UNDEF? UNDEF is the exception used when either HVC is disabled or if it's called from EL0. I couldn't find anything that talks about how non-implemented immediates should be handled, I guess they would just be ignored? Do you have any sources that recommend UNDEF? The rest looks fine. Cheers, Andre. > + } > > if ( *nr >= ARRAY_SIZE(arm_hypercall_table) ) > { > @@ -2109,7 +2112,7 @@ void do_trap_guest_sync(struct cpu_user_regs *regs) > if ( hsr.iss == 0 ) > return do_trap_hvc_smccc(regs); > nr = regs->r12; > - do_trap_hypercall(regs, &nr, hsr.iss); > + do_trap_hypercall(regs, &nr, hsr); > regs->r12 = (uint32_t)nr; > break; > } > @@ -2123,7 +2126,7 @@ void do_trap_guest_sync(struct cpu_user_regs *regs) > #endif > if ( hsr.iss == 0 ) > return do_trap_hvc_smccc(regs); > - do_trap_hypercall(regs, ®s->x16, hsr.iss); > + do_trap_hypercall(regs, ®s->x16, hsr); > break; > case HSR_EC_SMC64: > /* > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |