• Daniel Axtens's avatar
    powerpc/kasan: Don't instrument non-maskable or raw interrupts · 5352090a
    Daniel Axtens authored
    Disable address sanitization for raw and non-maskable interrupt
    handlers, because they can run in real mode, where we cannot access
    the shadow memory.  (Note that kasan_arch_is_ready() doesn't test for
    real mode, since it is a static branch for speed, and in any case not
    all the entry points to the generic KASAN code are protected by
    kasan_arch_is_ready guards.)
    
    The changes to interrupt_nmi_enter/exit_prepare() look larger than
    they actually are.  The changes are equivalent to adding
    !IS_ENABLED(CONFIG_KASAN) to the conditions for calling nmi_enter() or
    nmi_exit() in real mode.  That is, the code is equivalent to using the
    following condition for calling nmi_enter/exit:
    
    	if (((!IS_ENABLED(CONFIG_PPC_BOOK3S_64) ||
    			!firmware_has_feature(FW_FEATURE_LPAR) ||
    			radix_enabled()) &&
    		    !IS_ENABLED(CONFIG_KASAN) ||
    		(mfmsr() & MSR_DR))
    
    That unwieldy condition has been split into several statements with
    comments, for easier reading.
    
    The nmi_ipi_lock functions that call atomic functions (i.e.,
    nmi_ipi_lock_start(), nmi_ipi_lock() and nmi_ipi_unlock()), besides
    being marked noinstr, now call arch_atomic_* functions instead of
    atomic_* functions because with KASAN enabled, the atomic_* functions
    are wrappers which explicitly do address sanitization on their
    arguments.  Since we are trying to avoid address sanitization, we have
    to use the lower-level arch_atomic_* versions.
    
    In hv_nmi_check_nonrecoverable(), the regs_set_unrecoverable() call
    has been open-coded so as to avoid having to either trust the inlining
    or mark regs_set_unrecoverable() as noinstr.
    
    [paulus@ozlabs.org: combined a few work-in-progress commits of
     Daniel's and wrote the commit message.]
    Signed-off-by: default avatarDaniel Axtens <dja@axtens.net>
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/YoTFGaKM8Pd46PIK@cleo
    5352090a
interrupt.h 19.9 KB