kmsan: core: kmsan_in_runtime() should return true in NMI context
authorAlexander Potapenko <glider@google.com>
Wed, 2 Nov 2022 11:06:07 +0000 (12:06 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 8 Nov 2022 23:57:24 +0000 (15:57 -0800)
Without that, every call to __msan_poison_alloca() in NMI may end up
allocating memory, which is NMI-unsafe.

Link: https://lkml.kernel.org/r/20221102110611.1085175-1-glider@google.com
Link: https://lore.kernel.org/lkml/20221025221755.3810809-1-glider@google.com/
Signed-off-by: Alexander Potapenko <glider@google.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Marco Elver <elver@google.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/kmsan/kmsan.h

index 7019c46..a147442 100644 (file)
@@ -124,6 +124,8 @@ static __always_inline bool kmsan_in_runtime(void)
 {
        if ((hardirq_count() >> HARDIRQ_SHIFT) > 1)
                return true;
+       if (in_nmi())
+               return true;
        return kmsan_get_context()->kmsan_in_runtime;
 }