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=-11.4 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=no 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 3622AC5DF60 for ; Fri, 8 Nov 2019 12:17:18 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id DE9A2206DF for ; Fri, 8 Nov 2019 12:17:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ro639bIL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DE9A2206DF 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 754556B0007; Fri, 8 Nov 2019 07:17:17 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 72BB06B0008; Fri, 8 Nov 2019 07:17:17 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 642656B000A; Fri, 8 Nov 2019 07:17:17 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0080.hostedemail.com [216.40.44.80]) by kanga.kvack.org (Postfix) with ESMTP id 507B66B0007 for ; Fri, 8 Nov 2019 07:17:17 -0500 (EST) Received: from smtpin13.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with SMTP id 082CE4DDA for ; Fri, 8 Nov 2019 12:17:17 +0000 (UTC) X-FDA: 76133010114.13.use57_3f8476821bd1c X-HE-Tag: use57_3f8476821bd1c X-Filterd-Recvd-Size: 8647 Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) by imf09.hostedemail.com (Postfix) with ESMTP for ; Fri, 8 Nov 2019 12:17:16 +0000 (UTC) Received: by mail-qt1-f193.google.com with SMTP id u22so6188517qtq.13 for ; Fri, 08 Nov 2019 04:17:16 -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; bh=me4dr5inntYuIg8zSRJcQxOIXAx0M3HVasWbV7OCRCs=; b=ro639bILQTdv/Xms7Z7gGdyPoYRlyI2oaBxG364v9YBNAS2fMCzVQUBQVDNqWDfNuD 6dORSUTWxB1EyY+msx7PaMiaG/3VkW5+eBSymrl/m5C2hoULMNFIdETG5DupKBRWzBSB gWhSe+6lKiqyG4VE4MfEiOxK3vDmbXZ0czrcpEKIk98XPPex2IoaHL0X9nQUxuuMDCAA mqMBE+bY08EBrCv1PZNeW1QWw1Ax0pHyaAAQNd5RFtjb8GA4638a8wHtYE8Yp943Ub4T 4SBP7QCKLJ0AhWOV+S616Qke7G5hrl6D6yQa0Wt8N9DwNGsDlOZg6MDPVajRvlMR7LYy bTwA== 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; bh=me4dr5inntYuIg8zSRJcQxOIXAx0M3HVasWbV7OCRCs=; b=UjzRyg9p2pLrF4GmQ9Bnr3Buv96JgJkSMWi19zvLY6/nIlz4f80/7odOjSaEiB3N5d HIBUjmBV97HAiAD/20eFmjtJlVgOwpik3OXsa7AgZwB4TCuJNwW0YOE2ca+qbqi63/KM UpISiUwZjcTbMrEYTtJrp2UBtofaRLFMoeLJASAGislRdsdEr1DXDsu1R5PbNLvk84yV CL6ncTyLbmeWiQ/cjXMYhZTDYdxRe86Daqa9XbKuQiK2tdIMPwxLypInLNcPCryQ59QN 7J3kej4qMljF6YuyQlPbPaE1GXHrC7BooGM0PHDj8h99YLtBxUnPl8nc67yhJEttBvII DqIg== X-Gm-Message-State: APjAAAVdTg7aCHCAtLzEvhAti4TY5C6UJH6moc3r4lFXvgR0Myg8ozDf JJnLMjvZu36nr/d6PnUuzb9FaFnezdQPk+qBXul5bA== X-Google-Smtp-Source: APXvYqzhC6yGZEk4xp9U7jYpBw4R/fWO54oA/kGHRIi23BNg63oIb3U7XxMa+aJuXBNIXqVtLEK1BKOy7yv833QZimc= X-Received: by 2002:ac8:4157:: with SMTP id e23mr10049959qtm.158.1573215435466; Fri, 08 Nov 2019 04:17:15 -0800 (PST) MIME-Version: 1.0 References: <20191030142237.249532-1-glider@google.com> <20191030142237.249532-10-glider@google.com> In-Reply-To: From: Dmitry Vyukov Date: Fri, 8 Nov 2019 13:17:04 +0100 Message-ID: Subject: Re: [PATCH RFC v2 09/25] kmsan: add KMSAN runtime To: Alexander Potapenko 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" , monstr@monstr.eu, Petr Mladek , Sergey Senozhatsky , Steven Rostedt , Takashi Iwai , "Theodore Ts'o" , Thomas Gleixner , Wolfram Sang , Vasily Gorbik , iii@linux.ibm.com, Mark Rutland , Matthew Wilcox , Randy Dunlap , Andrey Konovalov , Marco Elver Content-Type: text/plain; charset="UTF-8" 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:08 PM Dmitry Vyukov wrote: > > On Wed, Oct 30, 2019 at 3:23 PM 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 > > 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 = >+ 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