• Alexander Potapenko's avatar
    x86: kmsan: skip shadow checks in __switch_to() · b11671b3
    Alexander Potapenko authored
    When instrumenting functions, KMSAN obtains the per-task state (mostly
    pointers to metadata for function arguments and return values) once per
    function at its beginning, using the `current` pointer.
    
    Every time the instrumented function calls another function, this state
    (`struct kmsan_context_state`) is updated with shadow/origin data of the
    passed and returned values.
    
    When `current` changes in the low-level arch code, instrumented code can
    not notice that, and will still refer to the old state, possibly
    corrupting it or using stale data.  This may result in false positive
    reports.
    
    To deal with that, we need to apply __no_kmsan_checks to the functions
    performing context switching - this will result in skipping all KMSAN
    shadow checks and marking newly created values as initialized, preventing
    all false positive reports in those functions.  False negatives are still
    possible, but we expect them to be rare and impersistent.
    
    Link: https://lkml.kernel.org/r/20220915150417.722975-34-glider@google.comSuggested-by: default avatarMarco Elver <elver@google.com>
    Signed-off-by: default avatarAlexander Potapenko <glider@google.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Eric Biggers <ebiggers@google.com>
    Cc: Eric Biggers <ebiggers@kernel.org>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Ilya Leoshkevich <iii@linux.ibm.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Vegard Nossum <vegard.nossum@oracle.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    b11671b3
process_64.c 21.9 KB