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=-14.4 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 95060C432C3 for ; Fri, 29 Nov 2019 15:13:36 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 4A12E216F4 for ; Fri, 29 Nov 2019 15:13:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="PzqUsGL5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4A12E216F4 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 EA7806B059E; Fri, 29 Nov 2019 10:13:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E583C6B059F; Fri, 29 Nov 2019 10:13:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D6E366B05A0; Fri, 29 Nov 2019 10:13:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0093.hostedemail.com [216.40.44.93]) by kanga.kvack.org (Postfix) with ESMTP id C07126B059E for ; Fri, 29 Nov 2019 10:13:35 -0500 (EST) Received: from smtpin29.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with SMTP id 83079180AD811 for ; Fri, 29 Nov 2019 15:13:35 +0000 (UTC) X-FDA: 76209659190.29.pull41_3c547ac367e10 X-HE-Tag: pull41_3c547ac367e10 X-Filterd-Recvd-Size: 8925 Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by imf33.hostedemail.com (Postfix) with ESMTP for ; Fri, 29 Nov 2019 15:13:34 +0000 (UTC) Received: by mail-pl1-f193.google.com with SMTP id h13so13017500plr.1 for ; Fri, 29 Nov 2019 07:13:34 -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=QPjbBjf37HLEzdNNtSPsc6zOLtYi29z5ruDC0IY4lFI=; b=PzqUsGL5AjLJ4PnWhJHp34o4WDklNYjABqPz+YprrgvV03pOWMCg92mkjqvMb40Az2 VELDZoqWEXkdl+t46FytSgIZt+rKb1P7mU3AenrKK8xVls7ln4DiqxG7sygXxIslcbAY IsxOJVqZIaTK/urdL01P1MsinYkT00dId3siz4PpTRyzYFmu1R2v88z6n6i7sOgsewme FpKxVNuzmyc+HyDhTt31zReI6KtMiKge0dQxJofiuO0GCzozsyFaOEpntRdwp3YV2qtx nOs9hhTnB+zCkWj1yw4N1prDlRg+Mu548Jc8tW5i16SZvN2jBkAHZw3jEUdiE/KEGbnI bUiw== 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=QPjbBjf37HLEzdNNtSPsc6zOLtYi29z5ruDC0IY4lFI=; b=sZaEQT6nvHd5wWYMER81Lq506YhvdwN5sva8u/oJntbUJpsOLSZnXhelfoijbR/LKi QopQQB7yO1C04iOeHuhxM9Q5H/W3KdD6/Ha9ZrfNMNivMGW/iGjVJHs4aDnAIf1UKmOp +zSkC2aCH/6Oj2a8mseyW7gxvFvE1DHeZRp2NvIFbRT5VsmH7UzUEsCWQvhf0P271Y8x 78ONnHz+6XFWZnVciwCKAhP37x5fkTYhAkVD6j5GZGod03JkizPethPuSyA8SW3UfLER LQwjmcSbveKv9wYktUleg2Qii28izzavxRs0dARb2/yFZXCjVn58Ywqmt5lWmGi2cmUT eU8g== X-Gm-Message-State: APjAAAWqeRDDodtWm1lfw0ne7tf+dPLZqeiooyQjhNlNtslWGvt+hpXO SQPlwrjtYKkTFWnKaQ0bcKSomzzTrSA58yigBXOVyg== X-Google-Smtp-Source: APXvYqzOzKqt6E7tsyrCseTWSlw1/tg+PM7lphWIFwq1wVFQT39758o5LMnXynogukGZm4XX/aaFIIxWPkDdeC2vbQ4= X-Received: by 2002:a17:90a:1f4b:: with SMTP id y11mr19094613pjy.123.1575040413019; Fri, 29 Nov 2019 07:13:33 -0800 (PST) MIME-Version: 1.0 References: <20191122112621.204798-1-glider@google.com> <20191122112621.204798-27-glider@google.com> In-Reply-To: <20191122112621.204798-27-glider@google.com> From: Andrey Konovalov Date: Fri, 29 Nov 2019 16:13:21 +0100 Message-ID: Subject: Re: [PATCH RFC v3 26/36] kmsan: use __msan_memcpy() where possible. To: Alexander Potapenko Cc: Vegard Nossum , Dmitry Vyukov , Linux Memory Management List , Alexander Viro , Andreas Dilger , Andrew Morton , Andrey Ryabinin , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Christoph Hellwig , Christoph Hellwig , darrick.wong@oracle.com, "David S. Miller" , Dmitry Torokhov , Eric Biggers , Eric Dumazet , ericvh@gmail.com, Greg Kroah-Hartman , harry.wentland@amd.com, Herbert Xu , iii@linux.ibm.com, mingo@elte.hu, Jason Wang , Jens Axboe , Marek Szyprowski , Marco Elver , Mark Rutland , "Martin K. Petersen" , Martin Schwidefsky , Matthew Wilcox , "Michael S . Tsirkin" , Michal Simek , pmladek@suse.com, Qian Cai , Randy Dunlap , Robin Murphy , sergey.senozhatsky@gmail.com, Steven Rostedt , Takashi Iwai , "Theodore Ts'o" , Thomas Gleixner , gor@linux.ibm.com, wsa@the-dreams.de 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 22, 2019 at 12:27 PM wrote: > > Unless stated otherwise (by explicitly calling __memcpy()) we want all > memcpy() calls to call __msan_memcpy() so that shadow and origin values > are updated accordingly. Why do we only do this for memcpy() but not for memove() and others? > > Bootloader must still the default string functions to avoid crashes. must still use > > Signed-off-by: Alexander Potapenko > To: Alexander Potapenko > Cc: Vegard Nossum > Cc: Dmitry Vyukov > Cc: linux-mm@kvack.org > --- > v3: > - use default string functions in the bootloader > > Change-Id: Ib2512ce5aa8d457453dd38caa12f58f002166813 > --- > arch/x86/boot/compressed/misc.h | 1 + > arch/x86/include/asm/string_64.h | 9 ++++++++- > include/linux/compiler.h | 9 ++++++++- > include/linux/string.h | 2 ++ > 4 files changed, 19 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h > index c8181392f70d..dd4bd8c5d97a 100644 > --- a/arch/x86/boot/compressed/misc.h > +++ b/arch/x86/boot/compressed/misc.h > @@ -12,6 +12,7 @@ > #undef CONFIG_PARAVIRT_XXL > #undef CONFIG_PARAVIRT_SPINLOCKS > #undef CONFIG_KASAN > +#undef CONFIG_KMSAN > > /* cpu_feature_enabled() cannot be used this early */ > #define USE_EARLY_PGTABLE_L5 > diff --git a/arch/x86/include/asm/string_64.h b/arch/x86/include/asm/string_64.h > index 75314c3dbe47..d3c76d910c23 100644 > --- a/arch/x86/include/asm/string_64.h > +++ b/arch/x86/include/asm/string_64.h > @@ -11,7 +11,13 @@ > function. */ > > #define __HAVE_ARCH_MEMCPY 1 > +#if defined(CONFIG_KMSAN) > +#undef memcpy > +/* __msan_memcpy() is defined in compiler.h */ > +#define memcpy(dst, src, len) __msan_memcpy(dst, src, len) > +#else > extern void *memcpy(void *to, const void *from, size_t len); > +#endif > extern void *__memcpy(void *to, const void *from, size_t len); > > #define __HAVE_ARCH_MEMSET > @@ -64,7 +70,8 @@ char *strcpy(char *dest, const char *src); > char *strcat(char *dest, const char *src); > int strcmp(const char *cs, const char *ct); > > -#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) > +#if (defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)) || \ > + (defined(CONFIG_KMSAN) && !defined(__SANITIZE_MEMORY__)) > > /* > * For files that not instrumented (e.g. mm/slub.c) we > diff --git a/include/linux/compiler.h b/include/linux/compiler.h > index 99d40f31a2c3..9ce11f4f4cb2 100644 > --- a/include/linux/compiler.h > +++ b/include/linux/compiler.h > @@ -179,6 +179,13 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, > > #include > > +#ifdef CONFIG_KMSAN > +void *__msan_memcpy(void *dst, const void *src, u64 size); > +#define __DO_MEMCPY(res, p, size) __msan_memcpy(res, p, size) > +#else > +#define __DO_MEMCPY(res, p, size) __builtin_memcpy(res, p, size) > +#endif > + > #define __READ_ONCE_SIZE \ > ({ \ > switch (size) { \ > @@ -188,7 +195,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, > case 8: *(__u64 *)res = *(volatile __u64 *)p; break; \ > default: \ > barrier(); \ > - __builtin_memcpy((void *)res, (const void *)p, size); \ > + __DO_MEMCPY((void *)res, (const void *)p, size); \ > barrier(); \ > } \ > }) > diff --git a/include/linux/string.h b/include/linux/string.h > index b6ccdc2c7f02..5d8ce09cba2e 100644 > --- a/include/linux/string.h > +++ b/include/linux/string.h > @@ -363,6 +363,7 @@ __FORTIFY_INLINE void *memset(void *p, int c, __kernel_size_t size) > return __builtin_memset(p, c, size); > } > > +#ifndef CONFIG_KMSAN > __FORTIFY_INLINE void *memcpy(void *p, const void *q, __kernel_size_t size) > { > size_t p_size = __builtin_object_size(p, 0); > @@ -377,6 +378,7 @@ __FORTIFY_INLINE void *memcpy(void *p, const void *q, __kernel_size_t size) > fortify_panic(__func__); > return __builtin_memcpy(p, q, size); > } > +#endif > > __FORTIFY_INLINE void *memmove(void *p, const void *q, __kernel_size_t size) > { > -- > 2.24.0.432.g9d3f5f5b63-goog >