On Thu, Jan 07, 2021 at 05:29:06PM +0000, Vincenzo Frascino wrote: > MTE provides an asynchronous mode for detecting tag exceptions. In > particular instead of triggering a fault the arm64 core updates a > register which is checked by the kernel at the first entry after the tag > exception has occurred.
Just rephrase the "tag exception" here as there's no exception taken. Also we don't check this only when the kernel is first entered after a tag check fault, as per patch 3. > --- a/arch/arm64/kernel/mte.c > +++ b/arch/arm64/kernel/mte.c > @@ -153,8 +153,35 @@ void mte_init_tags(u64 max_tag) > > void mte_enable_kernel(enum kasan_arg_mode mode) > { > - /* Enable MTE Sync Mode for EL1. */ > - sysreg_clear_set(sctlr_el1, SCTLR_ELx_TCF_MASK, SCTLR_ELx_TCF_SYNC); > + const char *m; > + > + /* Preset parameter values based on the mode. */ > + switch (mode) { > + case KASAN_ARG_MODE_OFF: > + return; > + case KASAN_ARG_MODE_LIGHT: > + /* Enable MTE Async Mode for EL1. */ > + sysreg_clear_set(sctlr_el1, SCTLR_ELx_TCF_MASK, > SCTLR_ELx_TCF_ASYNC); > + m = "asynchronous"; > + break; > + case KASAN_ARG_MODE_DEFAULT: > + case KASAN_ARG_MODE_PROD: > + case KASAN_ARG_MODE_FULL: > + /* Enable MTE Sync Mode for EL1. */ > + sysreg_clear_set(sctlr_el1, SCTLR_ELx_TCF_MASK, > SCTLR_ELx_TCF_SYNC); > + m = "synchronous"; > + break; > + default: > + /* > + * kasan mode should be always set hence we should > + * not reach this condition. > + */ > + WARN_ON_ONCE(1); > + return; > + } I guess the switch statement here will be re-written as we want kasan to drive the actual sync/async modes as it sees fit rather than MTE guessing what PROD/FULL/LIGHT means. -- Catalin