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 E2F00C7EE23 for ; Mon, 27 Feb 2023 00:20:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 460C56B0072; Sun, 26 Feb 2023 19:20:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3E9C66B0073; Sun, 26 Feb 2023 19:20:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B1956B0074; Sun, 26 Feb 2023 19:20:08 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 159A16B0072 for ; Sun, 26 Feb 2023 19:20:08 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id E70521C5F22 for ; Mon, 27 Feb 2023 00:20:07 +0000 (UTC) X-FDA: 80511164454.21.14C87BE Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.170]) by imf30.hostedemail.com (Postfix) with ESMTP id 22B8680006 for ; Mon, 27 Feb 2023 00:20:05 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=U0jNu4jU; spf=pass (imf30.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.215.170 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677457206; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=QaBhu4nRrGvT6uybXjxPcv2+70gLwq36FlwiKtV0inw=; b=ebllJ5dycIPb8WTuWSidP4ZqhLfvs8Q/k3CHGfFs3h5qvhE0n6m1LyCuoQtlcfZlQVMyMG hlUHgXmzH5Szau6pR8tNGWap3ldJZi9iofCyojqP2O37N7C8bTXVWU52UAu6cllHFNOihS s6iBQ1suSYGP4451x1RLhs1vqkrA3Z8= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=U0jNu4jU; spf=pass (imf30.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.215.170 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677457206; a=rsa-sha256; cv=none; b=OdKm7EYd7ucoL0L/kXcRoGMseR38NCbdN1hb42VWC04UnOZY6iXR7mYISmMXxKK5Lc72px ggf290PurRX7UGB8oeQJJ00DWKZcYWhtvidlZTTNLj4qV1J3X0tAbcdO4kl6OcGbgbrv+k vh1JH0WMXJy3qOtqk8wUmQqJA5B6pFQ= Received: by mail-pg1-f170.google.com with SMTP id bn17so2560887pgb.10 for ; Sun, 26 Feb 2023 16:20:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=QaBhu4nRrGvT6uybXjxPcv2+70gLwq36FlwiKtV0inw=; b=U0jNu4jUkY87GejubFVlCnxDox7OH1LuUQYnLUN/iuJECPca2CMQlnre20IJY286lu Tp5ItUE6p4elnkkIi9DoPs/HNjXopPRzNNn8tQi+QBh7qsCGrzG64EH1+vi2PA+XSeFa VO2iSlsos3i3euKLZ+ZizWxTCsXhojumKy4swfwfIoSHEqp/Q7MrqcXC/xgC1oRaEeIR KkQSjO0kr5Khbw/4Hjdc+u5EqmTqvFKKLjSHnLdCBan0v0PBsCiN7tuAlurzhqjOAyO1 RWsaq4L3E/9Xgn8XqHa0dmj1awhpeeZulKhK1QV5Ol1j2foGL7ggbDDA5svlhcl4bEgF HCrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QaBhu4nRrGvT6uybXjxPcv2+70gLwq36FlwiKtV0inw=; b=xpAWGEi8++QtdEkDsZHEKH2oDpYaGexmLR4J0cEMGqhbIZ1EMFhBaSd8FtrtrtJtEm nPp4X5gq8MFqVzmVW/Gug1w4fBE5rxi2FJblmNz10Q08RrPItFRVKW0ZZLup8KGCihmu c1iG/yAT1VvnO/3VROJd4PkfFtgJtKUOAZZ5kys/ATWr69v4Px7VxaTjebB+eNFoiDt7 tMLh36LOa+DTy2GCrX1AuVs7PrWHHEqqY+/SffCnHVCYfT6TDDxdlLcmRHKvg/KQ+eOu geb2ib5JavVgbdC8lOlS5UFykJtoVIUqKeaWsZSV3wz3TY4/jzWx1FoTktU5LG6yHxUx wvPA== X-Gm-Message-State: AO0yUKXKqlOGF4kC2/k+YImiqNL2Aw17wdh9rCcoX0TPE+4KLr1bdXRK 5zyEk2XOsRR1go21PC7a7HNBYx+NzjqT042AsdA= X-Google-Smtp-Source: AK7set9pF9UNM2lLATGxy6sDUfGu4yEFZ+GeksxJGUnX2VpBR2Rf4Yx6EZbdxSZ+GFVQiuc+Xb9DcXiO+UH/48x/Hf0= X-Received: by 2002:a63:7b49:0:b0:502:f4c6:b96 with SMTP id k9-20020a637b49000000b00502f4c60b96mr3813256pgn.5.1677457204959; Sun, 26 Feb 2023 16:20:04 -0800 (PST) MIME-Version: 1.0 References: <20230224065128.505605-1-pcc@google.com> In-Reply-To: <20230224065128.505605-1-pcc@google.com> From: Andrey Konovalov Date: Mon, 27 Feb 2023 01:19:53 +0100 Message-ID: Subject: Re: [PATCH] kasan: remove PG_skip_kasan_poison flag To: Peter Collingbourne Cc: catalin.marinas@arm.com, linux-mm@kvack.org, kasan-dev@googlegroups.com, ryabinin.a.a@gmail.com, linux-arm-kernel@lists.infradead.org, vincenzo.frascino@arm.com, will@kernel.org, eugenis@google.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 22B8680006 X-Stat-Signature: ti1p9abqc7bacwd1w4wgkgpk9hp5ds4t X-Rspam-User: X-HE-Tag: 1677457205-213455 X-HE-Meta: U2FsdGVkX1+BJtCYW35TosvA2m10XqEdl+TfdTAUc6SXP6h2Oqxn9MuFfmKRzV4tJt9XX0X3YXF7swj1YbOUHvWHW/glTYZCtBm1D1+l6O7aw+eYeC3gpO0jj56muTOjqSO87OBofGFteoZpnwCr+T4RdwnOlEOe5rPT48C4oqaWU/sqvCRQZWgYN7fhgiOTtHlARNc6tvc9cYlqPKk9aB7OJjo9FxDbKLv7iBEuXLu3q9KzN92rdOppGlIADMU0zO15CbhzPEeX7G45YmjcN/wojL4IdoAyuOL4S7GAtAavkjygLOoY/UrpAiHWjIBSkBtYfecKZj9mv7FAZi42mXLhrsYIyMNw8iZz0C45uDhJujTyhC83WW8b1ep1OyqpVRtYkLtoNSHHZuoaNjWPH3vbKnNAoCMtxOnM1tX75Ae51wXD1NtRtBr3UdOMRqXbDPF8yExkDQpmkDvmWKGBrzuDpKq5NIjTgWKtxzTG2BocYR+eoTgA0QpOo0XD+mtHkPhPYvdHJLCSgPdbUSpGrEh7ezofUP367oQws5WmwsJoT4hREXGWF98526vKWgteqnIILd3rydTgx0QLpfM2GSDkdZXTEcgU5lDPPZuKYaJwaYPWIfPHSmULDHBPMgjw63sAPU8rfjh6X9jZ6jY97QxSMWPrZ07wsz6VKzrzDOkL1j94pr81Hl6ZLuyBGmMjFOaH/zV3ZlXy2TcgxiSIq6vYa6Gmo7elB4cXi7zAr6+M8F6I9CkWZsTjIJLmH6HMQctuHVXzMpM8IkSjUWGphC9C0CwZA4BRGeUmSLYL0Owy+JvuYZhf0bfKENEXCZis8an8DCpDTl5RyA8wLPQHC0wDTuz2rh1omf2CX3OJk0oojuW2lrwXi0OXHrPkF7wmH+GqlrNkL34IDfNKxNaNY4F945WmopFEK9WSo0SKOKrMlDYB0zF0c8QFHcdabcJL98cv5xXRBnrMvZr7r50 1t/7S8wC ghWAYZX6Qs3XdWaTiEpL0hjh60jemmOtOP0EhyTdXzNRvQcTBNKWScWZFNqj62llkJcXZ98L9tgP8PXQPCfx33H3Eil/XHM5+h3rmXGspEz4SYBS7tlvEr13cF9mKISpcDdImyaRF3l0IFUggIUMikIYCg126TjIoFg6pBxGse74geSgF/5Qm1Q6Xjj6NjO6y5Oj0Q7+j8zqP8QwtOrTQzXdAugRUzZRc10Z8+d0lz9ME4U32L4fhzUhjjVsJ1yk+8p+sBBEIUY5SYVG3QX/I9H5jqwK3gg4uezWTc86y+2Nv4gZQ4JmJwlspEx1Sd2CKUPnvw0rzer3Ig6VjuCXe0BaTLuDTBqpIU+WjXzNl+t27lE/YXmJAeFfMDeZC5gkSX8hJ1g8YgqMV4IWpTMdm9SmZ9GnuBV6PP/xkZI9G/w2SpKt18x8WgOoyNPgolwBSAGEHOJMvOh9sW0iZ90xOcexXrsQ0PAEF894k0VxkuiRNSMzUvuiy5f7KPBZEifzOIpRezm1AZNLJM06RuiH0+lk+/YbiSyjCVOmUr5NaslmOcGgjeFWEQDaxOFONh0GEU59IfyUpdrTeXFgGfvvjDvtT73+iTbeb8lQYuF8jMr8CWOjEtnvz60FhrRntVSNcF2xJ 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, Feb 24, 2023 at 7:51 AM Peter Collingbourne wrote: > > Code inspection reveals that PG_skip_kasan_poison is redundant with > kasantag, because the former is intended to be set iff the latter is > the match-all tag. It can also be observed that it's basically pointless > to poison pages which have kasantag=0, because any pages with this tag > would have been pointed to by pointers with match-all tags, so poisoning > the pages would have little to no effect in terms of bug detection. > Therefore, change the condition in should_skip_kasan_poison() to check > kasantag instead, and remove PG_skip_kasan_poison. This seems reasonable. > Signed-off-by: Peter Collingbourne > Link: https://linux-review.googlesource.com/id/I57f825f2eaeaf7e8389d6cf4597c8a5821359838 > --- > I sent this independently of > https://lore.kernel.org/all/20230224061550.177541-1-pcc@google.com/ > because I initially thought that the patches were independent. > But moments after sending it, I realized that this patch depends on > that one, because without that patch, this patch will end up disabling > page poisoning altogether! But it's too late to turn them into a series > now; I'll do that for v2. > > include/linux/page-flags.h | 9 --------- > include/trace/events/mmflags.h | 9 +-------- > mm/page_alloc.c | 28 ++++++++-------------------- > 3 files changed, 9 insertions(+), 37 deletions(-) > > diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h > index a7e3a3405520..74f81a52e7e1 100644 > --- a/include/linux/page-flags.h > +++ b/include/linux/page-flags.h > @@ -135,9 +135,6 @@ enum pageflags { > #ifdef CONFIG_ARCH_USES_PG_ARCH_X > PG_arch_2, > PG_arch_3, > -#endif > -#ifdef CONFIG_KASAN_HW_TAGS > - PG_skip_kasan_poison, > #endif > __NR_PAGEFLAGS, > > @@ -594,12 +591,6 @@ TESTCLEARFLAG(Young, young, PF_ANY) > PAGEFLAG(Idle, idle, PF_ANY) > #endif > > -#ifdef CONFIG_KASAN_HW_TAGS > -PAGEFLAG(SkipKASanPoison, skip_kasan_poison, PF_HEAD) > -#else > -PAGEFLAG_FALSE(SkipKASanPoison, skip_kasan_poison) > -#endif > - > /* > * PageReported() is used to track reported free pages within the Buddy > * allocator. We can use the non-atomic version of the test and set > diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h > index 9db52bc4ce19..c448694fc7e9 100644 > --- a/include/trace/events/mmflags.h > +++ b/include/trace/events/mmflags.h > @@ -96,12 +96,6 @@ > #define IF_HAVE_PG_ARCH_X(flag,string) > #endif > > -#ifdef CONFIG_KASAN_HW_TAGS > -#define IF_HAVE_PG_SKIP_KASAN_POISON(flag,string) ,{1UL << flag, string} > -#else > -#define IF_HAVE_PG_SKIP_KASAN_POISON(flag,string) > -#endif > - > #define __def_pageflag_names \ > {1UL << PG_locked, "locked" }, \ > {1UL << PG_waiters, "waiters" }, \ > @@ -130,8 +124,7 @@ IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \ > IF_HAVE_PG_IDLE(PG_young, "young" ) \ > IF_HAVE_PG_IDLE(PG_idle, "idle" ) \ > IF_HAVE_PG_ARCH_X(PG_arch_2, "arch_2" ) \ > -IF_HAVE_PG_ARCH_X(PG_arch_3, "arch_3" ) \ > -IF_HAVE_PG_SKIP_KASAN_POISON(PG_skip_kasan_poison, "skip_kasan_poison") > +IF_HAVE_PG_ARCH_X(PG_arch_3, "arch_3" ) > > #define show_page_flags(flags) \ > (flags) ? __print_flags(flags, "|", \ > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 7136c36c5d01..2509b8bde8d5 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -1380,7 +1380,7 @@ static inline bool should_skip_kasan_poison(struct page *page, fpi_t fpi_flags) > return deferred_pages_enabled() || > (!IS_ENABLED(CONFIG_KASAN_GENERIC) && > (fpi_flags & FPI_SKIP_KASAN_POISON)) || > - PageSkipKASanPoison(page); > + page_kasan_tag(page) == 0xff; Please also update the comment above should_skip_kasan_poison. I think we can drop #3 and #4 from that comment and instead add a more generic #3: "Page tags have not been assigned, as unpoisoning has been skipped". > } > > static void kernel_init_pages(struct page *page, int numpages) > @@ -2511,22 +2511,13 @@ inline void post_alloc_hook(struct page *page, unsigned int order, > /* Take note that memory was initialized by the loop above. */ > init = false; > } > - if (!should_skip_kasan_unpoison(gfp_flags)) { > - /* Try unpoisoning (or setting tags) and initializing memory. */ > - if (kasan_unpoison_pages(page, order, init)) { > - /* Take note that memory was initialized by KASAN. */ > - if (kasan_has_integrated_init()) > - init = false; > - /* Take note that memory tags were set by KASAN. */ > - reset_tags = false; > - } else { > - /* > - * KASAN decided to exclude this allocation from being > - * (un)poisoned due to sampling. Make KASAN skip > - * poisoning when the allocation is freed. > - */ > - SetPageSkipKASanPoison(page); > - } > + if (!should_skip_kasan_unpoison(gfp_flags) && > + kasan_unpoison_pages(page, order, init)) { > + /* Take note that memory was initialized by KASAN. */ > + if (kasan_has_integrated_init()) > + init = false; > + /* Take note that memory tags were set by KASAN. */ > + reset_tags = false; > } > /* > * If memory tags have not been set by KASAN, reset the page tags to > @@ -2539,9 +2530,6 @@ inline void post_alloc_hook(struct page *page, unsigned int order, > /* If memory is still not initialized, initialize it now. */ > if (init) > kernel_init_pages(page, 1 << order); > - /* Propagate __GFP_SKIP_KASAN_POISON to page flags. */ > - if (kasan_hw_tags_enabled() && (gfp_flags & __GFP_SKIP_KASAN_POISON)) > - SetPageSkipKASanPoison(page); With this removed, __GFP_SKIP_KASAN_POISON is no longer used and can be removed too. > > set_page_owner(page, order, gfp_flags); > page_table_check_alloc(page, order); > -- > 2.39.2.637.g21b0678d19-goog >