Messages in this thread | | | Date | Thu, 8 Apr 2021 18:03:54 +0100 | From | Will Deacon <> | Subject | Re: [PATCH] arm64: mte: Move MTE TCF0 check in entry-common |
| |
On Thu, Apr 08, 2021 at 04:06:23PM +0100, Mark Rutland wrote: > On Thu, Apr 08, 2021 at 03:56:04PM +0100, Will Deacon wrote: > > On Thu, Apr 08, 2021 at 03:37:23PM +0100, Vincenzo Frascino wrote: > > > diff --git a/arch/arm64/kernel/entry-common.c b/arch/arm64/kernel/entry-common.c > > > index 9d3588450473..837d3624a1d5 100644 > > > --- a/arch/arm64/kernel/entry-common.c > > > +++ b/arch/arm64/kernel/entry-common.c > > > @@ -289,10 +289,16 @@ asmlinkage void noinstr enter_from_user_mode(void) > > > CT_WARN_ON(ct_state() != CONTEXT_USER); > > > user_exit_irqoff(); > > > trace_hardirqs_off_finish(); > > > + > > > + /* Check for asynchronous tag check faults in user space */ > > > + check_mte_async_tcf0(); > > > } > > > > Is enter_from_user_mode() always called when we enter the kernel from EL0? > > afaict, some paths (e.g. el0_irq()) only end up calling it if > > CONTEXT_TRACKING or TRACE_IRQFLAGS are enabled. > > Currently everything that's in {enter,exit}_from_user_mode() only > matters when either CONTEXT_TRACKING or TRACE_IRQFLAGS is selected (and > expands to an empty stub otherwise). > > We could drop the ifdeffery in user_{enter,exit}_irqoff() to have them > called regardless, or add CONFIG_MTE to the list.
I'm always in favour of dropping ifdeffery if it's getting in the way.
> > > asmlinkage void noinstr exit_to_user_mode(void) > > > { > > > + /* Ignore asynchronous tag check faults in the uaccess routines */ > > > + clear_mte_async_tcf0(); > > > + > > > > and this one seems to be called even less often. > > This is always done in ret_to_user, so (modulo ifdeferry above) all > returns to EL0 call this.
Right, I was just saying that if you disabled those CONFIG options then this isn't called _at all_ whereas I think enter_from_user_mode() still is on some paths.
Will
| |