From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.4 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C724AC432C3 for ; Thu, 21 Nov 2019 12:06:25 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 75FF420855 for ; Thu, 21 Nov 2019 12:06:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="buEW8LYt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 75FF420855 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 131C16B0310; Thu, 21 Nov 2019 07:06:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0E3C16B0311; Thu, 21 Nov 2019 07:06:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EECFA6B0312; Thu, 21 Nov 2019 07:06:24 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0147.hostedemail.com [216.40.44.147]) by kanga.kvack.org (Postfix) with ESMTP id DA1396B0310 for ; Thu, 21 Nov 2019 07:06:24 -0500 (EST) Received: from smtpin01.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with SMTP id 7D15D8249980 for ; Thu, 21 Nov 2019 12:06:24 +0000 (UTC) X-FDA: 76180157088.01.air81_8f270dc41ef0f X-HE-Tag: air81_8f270dc41ef0f X-Filterd-Recvd-Size: 9552 Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by imf15.hostedemail.com (Postfix) with ESMTP for ; Thu, 21 Nov 2019 12:06:23 +0000 (UTC) Received: by mail-wr1-f66.google.com with SMTP id t1so4106706wrv.4 for ; Thu, 21 Nov 2019 04:06:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=le8CTpTtHJBXM0XiFoq+3G82NxHvNuvZvaPnAccRuyI=; b=buEW8LYtnep3J9jHj7QOGNxJ5oY07H5IMHTAXoH3y6AZmABcsaXvReeEEhY+X34ZuI hEgEwcah3cNBwn+3/qfeFIbq2uys7bJ4FfXougQEco78NrtEjpo1tq7HXA/ynygXxLqD jY5Xcefl6BfYQUbU5xRt+ZT92sporM2Sit2yjZeFgUug83yFKBFYLejqVQyRpIhEemd9 PIqtpPYudVGaphGjJ8vuXCZSGJnOU8VDGMgWqx0O1H7sCXSKdgE8uVpdZdkojFINcGYd APw0wK9nMyU4D09riRIex+6c9Zka/SaKJ3xlfIz7ENgpq8usclUc0gLXNY3LODQnQrPY qggA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=le8CTpTtHJBXM0XiFoq+3G82NxHvNuvZvaPnAccRuyI=; b=H2pw4V0AZ44LGsSh3sg/PsOyz9q0OMMMimeypq4I5SxEGi+V8BetQBVkoUqfD5331r 0+cftLUsTX2L54x6tPao279w1ZysL/ao+N7cMyHSp2PyuJ1m0o5RPrFsY+QkhN3eWwY6 mxH//ZhMrQkqWIw+W94NmlADGfSW1bjqtW7Zm9XTzHqkUpSQVi0sTJVK68aOhW+F/wgv Jjg2D9j/znaMdrDZQzqMGTScZ6zriFuKQFsOoWm1KpCpVH4InNnwZ2oAm+/kNU3pE92m NyR39Zv8VKQMaNaD2FYA0fFUm44zJ4EpAee3rSrdcZhkYsjTZPuJqtjesHWWKIgXbSdK YDpQ== X-Gm-Message-State: APjAAAUUKdcXWDDfjIfxtBUkdvTXmpRAQxnDj2luyPazv65sMv4+yukr Y7q35AN7G7rOZjBvJ/BgBpQGweFzGstZOV6EOSvozg== X-Google-Smtp-Source: APXvYqx2OYiT5jpg3slZbdpKtptsvA+EKywJqd8GpTL9DP4SBxqkWjMiUGlEKN+kR/39OKSHIZ3QBo+XYDdSHEzjUus= X-Received: by 2002:adf:e911:: with SMTP id f17mr10667758wrm.300.1574337982049; Thu, 21 Nov 2019 04:06:22 -0800 (PST) MIME-Version: 1.0 References: <20191030142237.249532-1-glider@google.com> <20191030142237.249532-10-glider@google.com> In-Reply-To: From: Alexander Potapenko Date: Thu, 21 Nov 2019 13:06:10 +0100 Message-ID: Subject: Re: [PATCH RFC v2 09/25] kmsan: add KMSAN runtime To: Dmitry Vyukov Cc: Vegard Nossum , Linux-MM , Al Viro , Andrew Morton , Andrey Ryabinin , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Christoph Hellwig , Dmitry Torokhov , Eric Dumazet , Eric Van Hensbergen , Greg Kroah-Hartman , Harry Wentland , Herbert Xu , Ingo Molnar , Jens Axboe , "Martin K. Petersen" , Martin Schwidefsky , "Michael S. Tsirkin" , Michal Simek , Petr Mladek , Sergey Senozhatsky , Steven Rostedt , Takashi Iwai , "Theodore Ts'o" , Thomas Gleixner , Wolfram Sang , Vasily Gorbik , Ilya Leoshkevich , Mark Rutland , Matthew Wilcox , Randy Dunlap , Andrey Konovalov , Marco Elver Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri, Nov 8, 2019 at 1:17 PM Dmitry Vyukov wrote: > > On Fri, Nov 8, 2019 at 1:08 PM Dmitry Vyukov wrote: > > > > On Wed, Oct 30, 2019 at 3:23 PM wrote: > > > > > > This patch adds the KernelMemorySanitizer runtime and associated file= s: > > > > > > - 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 > > > To: Alexander Potapenko > > > Cc: Vegard Nossum > > > Cc: Dmitry Vyukov > > > 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 =3D > >+ stack_depot_fetch(head, &chained_entries= ); > >+ stack_trace_print(chained_entries, chained_nr_en= tries, > >+ 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 Not sure this is strictly required for the initial version, but I've added the feature to the issue tracker: https://github.com/google/kmsan/issues/66 --=20 Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Stra=C3=9Fe, 33 80636 M=C3=BCnchen Gesch=C3=A4ftsf=C3=BChrer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg