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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8761AC19F28 for ; Wed, 3 Aug 2022 10:31:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E117F6B0071; Wed, 3 Aug 2022 06:30:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DC1288E0001; Wed, 3 Aug 2022 06:30:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C615B6B0073; Wed, 3 Aug 2022 06:30:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B6D736B0071 for ; Wed, 3 Aug 2022 06:30:59 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 7ADA81214DE for ; Wed, 3 Aug 2022 10:30:59 +0000 (UTC) X-FDA: 79757913438.29.1B5C2AD Received: from mail-yb1-f169.google.com (mail-yb1-f169.google.com [209.85.219.169]) by imf27.hostedemail.com (Postfix) with ESMTP id 067DC40123 for ; Wed, 3 Aug 2022 10:30:58 +0000 (UTC) Received: by mail-yb1-f169.google.com with SMTP id 123so27683057ybv.7 for ; Wed, 03 Aug 2022 03:30:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc; bh=BnCISkt/rTW8As5S0Z1/CmUKmWtp6KufxVc54xAHFLs=; b=bTMMrVHLEXsaZsPJ4ir9RlmOn/kRdosyeadx3rkmGXU4lflYbV46JM5DZksUMtzIVN U/XEZSrcnqjbOBxVyOOXZVWlx0hp9Fu5nKxWv12BNG1XktevXZFB3m/Y6U7AR+1tVcE2 moSCPz5d5L9dbdRbJMQnG2/CX8KHw3/wr6ghKVtubKYXwknqG+9T92FwxaKne2npOKfO fDB0cU62aoS1208GpKYOLg5LwYk5buP/sgF+RjfJpmGKtXJeAinS5Jzr3wLXQdoHpwkg lGa+9i5+l/igcHME3dLynxA3WXk5TN5TBIaxPE4oeCTUDNBsXUUsFu1mf5QJV6HhkRE8 9BPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc; bh=BnCISkt/rTW8As5S0Z1/CmUKmWtp6KufxVc54xAHFLs=; b=LMcvTRHVTE4fTIOAUUKcJaH0QZJmuCbdOboTVTDiglVn8cqvBZFLImpAEkOKRhHZEC U9DHvuVNi2J2xAVTZKn9jfYQkL95ADgI7rWcDSJjDdINVl0DMkS4fLdkxZ6f89IySRMr q6ekTeJJamSvhZSrwZlYXxwa5PhDEDVHFJLBnNbQfHL2ol1ELWINC7RlrbYwy2VjjvfA NkwxSn3OU7mfoKocsX39RUhoIvQpkcp+l7NKd36Qw2kwXtbJitNE8AL6crSrGf74Tmfm m9vIyPRINvhhZZuqvOcoJ9FE8YQMSpZRd6OBEAwXHXrjBSISwm/HMyB7LTRA1JA/eWVq xTKw== X-Gm-Message-State: ACgBeo1BzZ5eps4Sw+5YQ+CAHCYcAYJuRgWlLvpRMDoHYHeP5vYo50Ad cqAqfvyqrkyPzzVdUAauVb5NClvv20Ydc053gvlylA== X-Google-Smtp-Source: AA6agR7fdKTqJ79i3lBMbE47XG4iizoPXTEVMh+XjGTeEPP0Bf+PZ8XOj+9lhkdsDhh+hXPLRsJykxdjz32sjCymNEA= X-Received: by 2002:a05:6902:1348:b0:671:78a4:471f with SMTP id g8-20020a056902134800b0067178a4471fmr19280596ybu.242.1659522658125; Wed, 03 Aug 2022 03:30:58 -0700 (PDT) MIME-Version: 1.0 References: <20220701142310.2188015-1-glider@google.com> <20220701142310.2188015-15-glider@google.com> In-Reply-To: From: Alexander Potapenko Date: Wed, 3 Aug 2022 12:30:21 +0200 Message-ID: Subject: Re: [PATCH v4 14/45] mm: kmsan: maintain KMSAN metadata for page operations To: Marco Elver Cc: Alexander Viro , Alexei Starovoitov , Andrew Morton , Andrey Konovalov , Andy Lutomirski , Arnd Bergmann , Borislav Petkov , Christoph Hellwig , Christoph Lameter , David Rientjes , Dmitry Vyukov , Eric Dumazet , Greg Kroah-Hartman , Herbert Xu , Ilya Leoshkevich , Ingo Molnar , Jens Axboe , Joonsoo Kim , Kees Cook , Mark Rutland , Matthew Wilcox , "Michael S. Tsirkin" , Pekka Enberg , Peter Zijlstra , Petr Mladek , Steven Rostedt , Thomas Gleixner , Vasily Gorbik , Vegard Nossum , Vlastimil Babka , kasan-dev , Linux Memory Management List , Linux-Arch , LKML Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1659522659; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=BnCISkt/rTW8As5S0Z1/CmUKmWtp6KufxVc54xAHFLs=; b=l8C3fqpejN1Gd+v0dKAnJa6BoXGM54PUGKjUlyTxXy0FYsQmPBiGLNIFQsZA0hUI8jVI25 CCAVm5fLJAebAJbnFP86HTWlcaTiVwRAIbzPLaUGAGj+r/fI1TNna3I8X7+unxx+bcrAH5 RUadjMOYI+Kp8ER9E9qoZU2XizS26pg= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=bTMMrVHL; spf=pass (imf27.hostedemail.com: domain of glider@google.com designates 209.85.219.169 as permitted sender) smtp.mailfrom=glider@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1659522659; a=rsa-sha256; cv=none; b=cKjJ1K+QzLb/AYw04dRxDyqHeraX8gtNMo4bH/tUJHEo2+bESxBmJLikEJUodDat1TqOGB 0XgOqhLYIu/UBjvKmARjwmZ239djeEGYxYxQ5qgd8ED6Htze1aXflC5SFejTuBwg7Ejhgy Jb/Bln3UqwO4zT+DuS42IF99ZcGKPf8= X-Rspam-User: Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=bTMMrVHL; spf=pass (imf27.hostedemail.com: domain of glider@google.com designates 209.85.219.169 as permitted sender) smtp.mailfrom=glider@google.com; dmarc=pass (policy=reject) header.from=google.com X-Stat-Signature: 6j7ws8mu8ub3mx649ym685h8xdutwjy3 X-Rspamd-Queue-Id: 067DC40123 X-Rspamd-Server: rspam10 X-HE-Tag: 1659522658-505313 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 Tue, Jul 12, 2022 at 2:21 PM Marco Elver wrote: > > On Fri, 1 Jul 2022 at 16:23, Alexander Potapenko wrot= e: > > > > Insert KMSAN hooks that make the necessary bookkeeping changes: > > - poison page shadow and origins in alloc_pages()/free_page(); > > - clear page shadow and origins in clear_page(), copy_user_highpage(); > > - copy page metadata in copy_highpage(), wp_page_copy(); > > - handle vmap()/vunmap()/iounmap(); > > > > Signed-off-by: Alexander Potapenko > > --- > > v2: > > -- move page metadata hooks implementation here > > -- remove call to kmsan_memblock_free_pages() > > > > v3: > > -- use PAGE_SHIFT in kmsan_ioremap_page_range() > > > > v4: > > -- change sizeof(type) to sizeof(*ptr) > > -- replace occurrences of |var| with @var > > -- swap mm: and kmsan: in the subject > > -- drop __no_sanitize_memory from clear_page() > > > > Link: https://linux-review.googlesource.com/id/I6d4f53a0e7eab46fa29f034= 8f3095d9f2e326850 > > --- > > arch/x86/include/asm/page_64.h | 12 ++++ > > arch/x86/mm/ioremap.c | 3 + > > include/linux/highmem.h | 3 + > > include/linux/kmsan.h | 123 +++++++++++++++++++++++++++++++++ > > mm/internal.h | 6 ++ > > mm/kmsan/hooks.c | 87 +++++++++++++++++++++++ > > mm/kmsan/shadow.c | 114 ++++++++++++++++++++++++++++++ > > mm/memory.c | 2 + > > mm/page_alloc.c | 11 +++ > > mm/vmalloc.c | 20 +++++- > > 10 files changed, 379 insertions(+), 2 deletions(-) > > > > diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page= _64.h > > index baa70451b8df5..227dd33eb4efb 100644 > > --- a/arch/x86/include/asm/page_64.h > > +++ b/arch/x86/include/asm/page_64.h > > @@ -45,14 +45,26 @@ void clear_page_orig(void *page); > > void clear_page_rep(void *page); > > void clear_page_erms(void *page); > > > > +/* This is an assembly header, avoid including too much of kmsan.h */ > > All of this code is under an "#ifndef __ASSEMBLY__" guard, does it matter= ? Actually, the comment is a bit outdated. kmsan-checks.h doesn't introduce any unnecessary declarations and can be used here. > > +#ifdef CONFIG_KMSAN > > +void kmsan_unpoison_memory(const void *addr, size_t size); > > +#endif > > static inline void clear_page(void *page) > > { > > +#ifdef CONFIG_KMSAN > > + /* alternative_call_2() changes @page. */ > > + void *page_copy =3D page; > > +#endif > > alternative_call_2(clear_page_orig, > > clear_page_rep, X86_FEATURE_REP_GOOD, > > clear_page_erms, X86_FEATURE_ERMS, > > "=3DD" (page), > > "0" (page) > > : "cc", "memory", "rax", "rcx"); > > +#ifdef CONFIG_KMSAN > > + /* Clear KMSAN shadow for the pages that have it. */ > > + kmsan_unpoison_memory(page_copy, PAGE_SIZE); > > What happens if this is called before the alternative-call? Could this > (in the interest of simplicity) be moved above it? And if you used the > kmsan-checks.h header, it also doesn't need any "ifdef CONFIG_KMSAN" > anymore. Good idea, that'll work. > > +#endif > > } --=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, Liana Sebastian Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg