linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Dmitry Vyukov <dvyukov@google.com>
To: Alexander Potapenko <glider@google.com>
Cc: Vegard Nossum <vegard.nossum@oracle.com>,
	Linux-MM <linux-mm@kvack.org>,  Al Viro <viro@zeniv.linux.org.uk>,
	Andrew Morton <akpm@linux-foundation.org>,
	 Andrey Ryabinin <aryabinin@virtuozzo.com>,
	Andy Lutomirski <luto@kernel.org>,
	 Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Arnd Bergmann <arnd@arndb.de>,  Christoph Hellwig <hch@lst.de>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	 Eric Dumazet <edumazet@google.com>,
	Eric Van Hensbergen <ericvh@gmail.com>,
	 Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Harry Wentland <harry.wentland@amd.com>,
	 Herbert Xu <herbert@gondor.apana.org.au>,
	Ingo Molnar <mingo@elte.hu>,  Jens Axboe <axboe@kernel.dk>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	 Martin Schwidefsky <schwidefsky@de.ibm.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	monstr@monstr.eu,  Petr Mladek <pmladek@suse.com>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	 Steven Rostedt <rostedt@goodmis.org>,
	Takashi Iwai <tiwai@suse.com>, "Theodore Ts'o" <tytso@mit.edu>,
	 Thomas Gleixner <tglx@linutronix.de>,
	Wolfram Sang <wsa@the-dreams.de>,
	 Vasily Gorbik <gor@linux.ibm.com>,
	iii@linux.ibm.com, Mark Rutland <mark.rutland@arm.com>,
	 Matthew Wilcox <willy@infradead.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	 Andrey Konovalov <andreyknvl@google.com>,
	Marco Elver <elver@google.com>
Subject: Re: [PATCH RFC v2 09/25] kmsan: add KMSAN runtime
Date: Fri, 8 Nov 2019 13:17:04 +0100	[thread overview]
Message-ID: <CACT4Y+bAV2CT61KzOfdvwbZRhpTmNfaqkiqyqavd_NQeE7QjhA@mail.gmail.com> (raw)
In-Reply-To: <CACT4Y+YOXre3tuFyVPPDrmXjtAiGF-BNo0CCpBaPDn_GXNLFoQ@mail.gmail.com>

On Fri, Nov 8, 2019 at 1:08 PM Dmitry Vyukov <dvyukov@google.com> wrote:
>
> On Wed, Oct 30, 2019 at 3:23 PM <glider@google.com> wrote:
> >
> > This patch adds the KernelMemorySanitizer runtime and associated files:
> >
> >   - arch/x86/include/asm/kmsan.h: assembly definitions for hooking
> >     interrupt handlers;
> >   - include/linux/kmsan-checks.h: user API to enable/disable KMSAN,
> >     poison/unpoison memory etc.
> >   - include/linux/kmsan.h: declarations of KMSAN memory hooks to be
> >     referenced outside KMSAN runtime
> >   - lib/Kconfig.kmsan: declarations for CONFIG_KMSAN and
> >     CONFIG_TEST_KMSAN
> >   - mm/kmsan/Makefile: boilerplate Makefile
> >   - mm/kmsan/kmsan.h: internal KMSAN declarations
> >   - mm/kmsan/kmsan.c: core functions that operate with shadow and
> >     origin memory and perform checks, utility functions
> >   - mm/kmsan/kmsan_entry.c: KMSAN hooks for entry_64.S
> >   - mm/kmsan/kmsan_hooks.c: KMSAN hooks for kernel subsystems
> >   - mm/kmsan/kmsan_init.c: KMSAN initialization routines
> >   - mm/kmsan/kmsan_instr.c: functions called by KMSAN instrumentation
> >   - scripts/Makefile.kmsan: CFLAGS_KMSAN
> >
> > Signed-off-by: Alexander Potapenko <glider@google.com>
> > To: Alexander Potapenko <glider@google.com>
> > Cc: Vegard Nossum <vegard.nossum@oracle.com>
> > Cc: Dmitry Vyukov <dvyukov@google.com>
> > Cc: linux-mm@kvack.org
>
> >+                       kmsan_pr_err("Local variable description: %s\n", descr);
> >+                       kmsan_pr_err("Variable was created at:\n");
>
> It would be nice to tidy up the description, it contains lots of
> duplicate/unneeded/confusing info:
>
> Local variable description: ----br.i@vp7045_read_mac_addr
> Variable was created at:
>  vp7045_read_eeprom drivers/media/usb/dvb-usb/vp7045.c:119 [inline]
>  vp7045_read_mac_addr+0x7b/0xbe0 drivers/media/usb/dvb-usb/vp7045.c:132
>  vp7045_read_eeprom drivers/media/usb/dvb-usb/vp7045.c:119 [inline]
>  vp7045_read_mac_addr+0x7b/0xbe0 drivers/media/usb/dvb-usb/vp7045.c:132
>
> It could be just:
>
> Local variable br was created at:
>  vp7045_read_eeprom drivers/media/usb/dvb-usb/vp7045.c:119 [inline]
>  vp7045_read_mac_addr+0x7b/0xbe0 drivers/media/usb/dvb-usb/vp7045.c:132
>  vp7045_read_eeprom drivers/media/usb/dvb-usb/vp7045.c:119 [inline]
>  vp7045_read_mac_addr+0x7b/0xbe0 drivers/media/usb/dvb-usb/vp7045.c:132


>+                       kmsan_pr_err("Uninit was stored to memory at:\n");
>+                       chained_nr_entries =
>+                               stack_depot_fetch(head, &chained_entries);
>+                       stack_trace_print(chained_entries, chained_nr_entries,
>+                                         0);

I like how KCSAN trims all stacks of internal runtime frames. It would
be nice to do the same for KMSAN, currently we have 3-4 uninteresting
frames in the beginning of each stack. Besides taking space, it also
requires to manually visually search for the actual interesting frame
somewhere in the middle of the stack. E.g. all these frames are
pointing into kmsan runtime guts:

Call Trace:
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x1c9/0x220 lib/dump_stack.c:113
 kmsan_report+0x12d/0x290 mm/kmsan/kmsan.c:682
 __msan_warning+0x76/0xc0 mm/kmsan/kmsan_instr.c:316

Uninit was stored to memory at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:247 [inline]
 kmsan_save_stack mm/kmsan/kmsan.c:262 [inline]
 kmsan_internal_chain_origin+0x162/0x260 mm/kmsan/kmsan.c:470
 __msan_chain_origin+0x6d/0xb0 mm/kmsan/kmsan_instr.c:197

Uninit was stored to memory at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:247 [inline]
 kmsan_save_stack mm/kmsan/kmsan.c:262 [inline]
 kmsan_internal_chain_origin+0x162/0x260 mm/kmsan/kmsan.c:470
 __msan_chain_origin+0x6d/0xb0 mm/kmsan/kmsan_instr.c:197

Uninit was stored to memory at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:247 [inline]
 kmsan_save_stack mm/kmsan/kmsan.c:262 [inline]
 kmsan_internal_chain_origin+0x162/0x260 mm/kmsan/kmsan.c:470
 kmsan_memcpy_memmove_metadata+0x1a9/0xf30 mm/kmsan/kmsan.c:345
 kmsan_memcpy_metadata+0xb/0x10 mm/kmsan/kmsan.c:363
 __msan_memcpy+0x61/0x70 mm/kmsan/kmsan_instr.c:148

Uninit was created at:
 kmsan_save_stack_with_flags mm/kmsan/kmsan.c:247 [inline]
 kmsan_internal_poison_shadow+0x92/0x150 mm/kmsan/kmsan.c:170
 kmsan_kmalloc+0xa1/0x100 mm/kmsan/kmsan_hooks.c:179
 kmsan_slab_alloc+0xe/0x10 mm/kmsan/kmsan_hooks.c:188
 slab_post_alloc_hook mm/slab.h:446 [inline]
 slab_alloc_node mm/slub.c:2759 [inline]
 __kmalloc_node_track_caller+0xf06/0x1120 mm/slub.c:4383


  reply	other threads:[~2019-11-08 12:17 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-30 14:22 [PATCH RFC v2 00/25] Add KernelMemorySanitizer infrastructure glider
2019-10-30 14:22 ` [PATCH RFC v2 01/25] stackdepot: check depot_index before accessing the stack slab glider
2019-10-30 14:22 ` [PATCH RFC v2 02/25] stackdepot: prevent Clang from optimizing away stackdepot_memcmp() glider
2019-11-01  5:50   ` Sergey Senozhatsky
2019-11-06 11:43     ` Alexander Potapenko
2019-11-07  6:08       ` Sergey Senozhatsky
2019-11-07  9:04         ` Arnd Bergmann
2019-11-07  9:22           ` Alexander Potapenko
2019-11-07  9:28             ` Arnd Bergmann
2019-11-07  9:43               ` Alexander Potapenko
     [not found]             ` <47fdac13-fa2c-2acd-2480-5e6d4db208f8@virtuozzo.com>
2019-11-07 10:00               ` Arnd Bergmann
     [not found]                 ` <6875c6e6-2f1f-f8e6-e5d7-d451c48397ff@virtuozzo.com>
2019-11-07 10:30                   ` Alexander Potapenko
2019-10-30 14:22 ` [PATCH RFC v2 03/25] kasan: stackdepot: move filter_irq_stacks() to stackdepot.c glider
2019-10-30 14:22 ` [PATCH RFC v2 04/25] stackdepot: reserve 5 extra bits in depot_stack_handle_t glider
2019-10-30 14:22 ` [PATCH RFC v2 05/25] kmsan: add ReST documentation glider
2019-10-30 14:22 ` [PATCH RFC v2 06/25] kmsan: gfp: introduce __GFP_NO_KMSAN_SHADOW glider
2019-10-30 14:22 ` [PATCH RFC v2 07/25] kmsan: introduce __no_sanitize_memory and __SANITIZE_MEMORY__ glider
2019-10-30 15:50   ` Andrey Konovalov
2019-11-01 12:52     ` Alexander Potapenko
2019-10-30 14:22 ` [PATCH RFC v2 08/25] kmsan: reduce vmalloc space glider
2019-10-30 14:22 ` [PATCH RFC v2 09/25] kmsan: add KMSAN runtime glider
2019-11-08 12:08   ` Dmitry Vyukov
2019-11-08 12:17     ` Dmitry Vyukov [this message]
2019-11-21 12:06       ` Alexander Potapenko
2019-11-13  8:13   ` Wolfram Sang
2019-11-21 12:01     ` Alexander Potapenko
2019-10-30 14:22 ` [PATCH RFC v2 10/25] kmsan: define READ_ONCE_NOCHECK() glider
2019-11-05 14:21   ` Mark Rutland
2019-11-21 12:08     ` Alexander Potapenko
2019-10-30 14:22 ` [PATCH RFC v2 11/25] kmsan: x86: sync metadata pages on page fault glider
2019-10-30 14:22 ` [PATCH RFC v2 12/25] kmsan: add tests for KMSAN glider
2019-10-30 14:22 ` [PATCH RFC v2 13/25] kmsan: make READ_ONCE_TASK_STACK() return initialized values glider
2019-10-30 14:22 ` [PATCH RFC v2 14/25] kmsan: Kconfig changes to disable options incompatible with KMSAN glider
2019-10-30 14:34   ` Qian Cai
2019-10-30 14:34   ` Christoph Hellwig
2019-10-30 14:22 ` [PATCH RFC v2 15/25] kmsan: Changing existing files to enable KMSAN builds glider
2019-10-30 14:36   ` Christoph Hellwig
2019-10-30 14:22 ` [PATCH RFC v2 16/25] kmsan: disable KMSAN instrumentation for certain kernel parts glider
2019-10-30 14:22 ` [PATCH RFC v2 17/25] kmsan: mm: call KMSAN hooks from SLUB code glider
2019-10-30 16:07   ` Andrey Konovalov
2019-10-30 14:22 ` [PATCH RFC v2 18/25] kmsan: call KMSAN hooks where needed glider
2019-10-31 11:49   ` Petr Mladek
2019-11-01  8:26     ` Sergey Senozhatsky
2019-11-05 14:12       ` Alexander Potapenko
2019-11-06  9:04         ` Petr Mladek
2019-11-06  9:07         ` Sergey Senozhatsky
2019-10-30 14:22 ` [PATCH RFC v2 19/25] kmsan: disable instrumentation of certain functions glider
2019-10-30 14:22 ` [PATCH RFC v2 20/25] kmsan: unpoison |tlb| in arch_tlb_gather_mmu() glider
2019-10-30 14:22 ` [PATCH RFC v2 21/25] kmsan: use __msan_memcpy() where possible glider
2019-10-30 14:22 ` [PATCH RFC v2 22/25] kmsan: unpoisoning buffers from devices etc glider
2019-10-30 14:38   ` Christoph Hellwig
2019-11-05 15:02     ` Alexander Potapenko
2019-11-07 13:00       ` Alexander Potapenko
2019-11-13 11:07         ` Alexander Potapenko
2019-10-30 14:22 ` [PATCH RFC v2 23/25] kmsan: hooks for copy_to_user() and friends glider
2019-10-30 14:22 ` [PATCH RFC v2 24/25] kmsan: disable strscpy() optimization under KMSAN glider
2019-10-30 14:22 ` [PATCH RFC v2 25/25] net: kasan: kmsan: support CONFIG_GENERIC_CSUM on x86, enable it for KASAN/KMSAN glider

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CACT4Y+bAV2CT61KzOfdvwbZRhpTmNfaqkiqyqavd_NQeE7QjhA@mail.gmail.com \
    --to=dvyukov@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=andreyknvl@google.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=arnd@arndb.de \
    --cc=aryabinin@virtuozzo.com \
    --cc=axboe@kernel.dk \
    --cc=dmitry.torokhov@gmail.com \
    --cc=edumazet@google.com \
    --cc=elver@google.com \
    --cc=ericvh@gmail.com \
    --cc=glider@google.com \
    --cc=gor@linux.ibm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=harry.wentland@amd.com \
    --cc=hch@lst.de \
    --cc=herbert@gondor.apana.org.au \
    --cc=iii@linux.ibm.com \
    --cc=linux-mm@kvack.org \
    --cc=luto@kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=martin.petersen@oracle.com \
    --cc=mingo@elte.hu \
    --cc=monstr@monstr.eu \
    --cc=mst@redhat.com \
    --cc=pmladek@suse.com \
    --cc=rdunlap@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=schwidefsky@de.ibm.com \
    --cc=sergey.senozhatsky@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=tiwai@suse.com \
    --cc=tytso@mit.edu \
    --cc=vegard.nossum@oracle.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=willy@infradead.org \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).