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 23BA0C64EC4 for ; Wed, 1 Mar 2023 00:57:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A34F16B0071; Tue, 28 Feb 2023 19:57:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9E5296B0072; Tue, 28 Feb 2023 19:57:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 886296B0073; Tue, 28 Feb 2023 19:57:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 7481D6B0071 for ; Tue, 28 Feb 2023 19:57:45 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 3E6EF8074C for ; Wed, 1 Mar 2023 00:57:45 +0000 (UTC) X-FDA: 80518516890.12.0E66CC5 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by imf12.hostedemail.com (Postfix) with ESMTP id 6D2A940012 for ; Wed, 1 Mar 2023 00:57:43 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=UswGR9h8; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.210.170 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677632263; 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=LaXnzqpU4LQzSklGf2uPpfWehIVtSyT5rsgfrLRoiek=; b=O2v7c6xRf/EHlmNvkkCbXXoqxxxbjtoqvVSBC+ckBuGc4JXGZiD6dmUZTH08ifcXBHctpe qLrIQvaCOKTJY9IPR4i7hmWPeFO7kPZxrlxoijfnYVis0D3BiimB0EB5xIY1r24Ku6KBHJ VxSwFYiyV3AcGMUiydPBAjP4c2Kjrcs= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=UswGR9h8; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.210.170 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677632263; a=rsa-sha256; cv=none; b=VvB1UKh9vOw2EnpKmyDKXox+DsGs9m27GzJqgpDNo4/vUtQKUc+qq+Yuqe25ZFxDxxjLf5 OXWYEKubBSTYsmlgJFmtZEarPq2eV1hKb4SuRTrVbXnkIpTjO/JwSI517pCXrTAdisF1OP ros6ICJ9/d9+1Vc0Jb7Z4pt/ZlXEXlU= Received: by mail-pf1-f170.google.com with SMTP id z11so6942391pfh.4 for ; Tue, 28 Feb 2023 16:57:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1677632262; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=LaXnzqpU4LQzSklGf2uPpfWehIVtSyT5rsgfrLRoiek=; b=UswGR9h8d3r3qAdc8SeaiXDb19AOeQ9ZpuLxCFpFPyj1gfdNKMWjEGIJXhfEzhl+rA Hr7VjmXqab15UjEYURHYhjhajjcfsUyXgK2NHe85kLyDBB6cs0Zm3XB90jAV7luPQj58 LYPxQPO/4ZARJUcZ31FidrjP8LzLcQko5o0G67nm1BR59Atub944XzQETYXQTxny6S/3 JrLj2S0JKrhCo9HeeYpfu3jq1aNwIpYt1Sv0QH8sh1NgYVTncaTKW+GLKQ17ZVzL5LWd 4389TBhSe9W3zoCCT2Nr8g9x0YPnhdnNp9Md42Vmp8dUslnpNyfjPv8SW+ppfYPdFwGg olTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677632262; h=content-transfer-encoding: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=LaXnzqpU4LQzSklGf2uPpfWehIVtSyT5rsgfrLRoiek=; b=DCXusfEOrSoLRZtCMe/tUKdMpfvCVSnb7bs9nCWHfPQco18UcQfNl4vnnAdGt8HtcK uJdUxipx+nJXmJBD/V6ZzZhhhKyKG0fwl5qfiOCajRUiTIjQLvU8IHSXwgfNcFijVp5b tmewMG+ztgrBKmocYfgyNKzoYE7QSLDwLFC0xJbtLJehMSPcRuy9xkEGj+uO1TrWTp3V 0PYU1ecA+DmMwTrc/lC+mvS+FHE9Z1QBjoPMtq6QCkSy/ucebo8wiPiYCTOWRjfQxlXq +OAegs0UjWPd7lWyIVDp0NBrsllEs39WXwOt3D9JwEeHtQGUpy/NhcE58g0IaMeirElO zafA== X-Gm-Message-State: AO0yUKV+XtsROUYMNslitDVSzxtUswAl4v6YXwyTYWS8072poyhaPvHN /MKaqdA97PSDrUcxEU7wtWk7/As3nbBWIXf+MB4= X-Google-Smtp-Source: AK7set9UWHnCW8y8s4GYPPoEMdvWC/qm+tmCfgFQYPVrtmiP2ljh0vpw7C9QTFFlj39HUjoHI6mCZNOoFaDyA05AtW8= X-Received: by 2002:a63:1e51:0:b0:503:83e8:9b54 with SMTP id p17-20020a631e51000000b0050383e89b54mr842570pgm.1.1677632262027; Tue, 28 Feb 2023 16:57:42 -0800 (PST) MIME-Version: 1.0 References: <20230301003545.282859-1-pcc@google.com> <20230301003545.282859-3-pcc@google.com> In-Reply-To: <20230301003545.282859-3-pcc@google.com> From: Andrey Konovalov Date: Wed, 1 Mar 2023 01:57:31 +0100 Message-ID: Subject: Re: [PATCH v3 2/2] 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" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 6D2A940012 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: rzw7n18smo863gxtd6et7w5y37qwsm1k X-HE-Tag: 1677632263-945714 X-HE-Meta: U2FsdGVkX19rSPZI9LMGKxcX+qGHNnOWIGSv8mdwvvM2N7k+S3xyxdZwlSWAwX2nwsERDQA3/znh5lnWIyN/WIjVc30gl7BCMFjoUz6ULPpXQYLYWpXqxLMI28J2yFPexUqDJLwFYuqCDHgDsugx/inQJEA9G/xZXVILQo4x41nqP5gNjqZ6EiWSiqIcZIqgmiqd//NkWCZ7/HNNUqA9EwgSteBiy+JurSB7/lyf3FBy+rHc01YNzWKiL6SBIW8zjG1a8by3OZ0S3DnqzDLBDJY+wrxklWaUhj2mz6JR/f3ju6hI5QE/BvMzSQjJKFi6OQqvpvhL2CLd3LE+9vz+0VXh32HH+zbAmZfipeHIHRkRVytERjf9dRAZhBM5ifjp4zarSbkssar2mPc9bxJBwRQovaC32Ole/4NelMt2TPkwiAEUP/ceIiBUbT+7vYsn2UL6oRq5AbaLghYu4nuhv4Tdh8Y81714FctFemLDqUukypQcLJ6afIC4Zued3N682DeFz4aKEj4cW1YO3EK/YsPczrBEXfGo5CFARfDjhz88YGuitLuFqEHVbRZKKPU3pC7mwB3BiPcs1rNGUp+5Wj2NppYBQX/cwfEQmd7GpT97MjQ2090cqUHA57kw60+YNduvZNAmitOWjR2Iu5+lqWIlB1E1aduGVQhg45aAWA57DYbXVY2gSK/DkcV2BXGbrWDGywgY4Q6nG6b9WrUu2Ihjv97n/et3/On7bHCeye4fnJpZeh/7roUqNHObV39yIPgjC5Wj8g84OaQem9Xb8gD6VK/MFbC1hGuqBttdpF3qWDLyJGSmckMpKSfE7vJmdwuUu0YJp7KnTZ2JblInVg6gQ8t8IYw6opn9VYdsKWEgnI9Fg+16/hIRoHyv+XGjcoYV6utYH54jWPxpXAL5cfs/IscHSPgfHqHF30fyZxCLGXezALh0RpQD5v9qPQBl20IBD0V437IFCMqqX9U 4cYrlO+4 wsVENXFL4eWiR209xumBk8ZsroSmQqd10rLSjZuHMFErKwdGqCDsQvxotIzaQDAhTh4049ujfzanA5lxaDPEwClekq2jT5GYrDjW0fraJqQCXTQSCD0ioVg/ziYwdSCN9/x24YTphmhjqChajcu6dxNtlWyVnmxiOmq3a93iFs2QEvMf7v2wHUM+GqJYEnsLXwE4yxJb1/Qyk9ypKUJHy0XF9Qiq4sM/XbxYufMwXnBCOqEi6ux47QU4HxSbkIOBeCSrcQ+1SolBj3BSIhwi6yT6tYxWWIdYrtCSDiwNUc1rbZNx8DM/ZBfhKv0FE8qhCaJ/xaoUO0I41LYzk119WBmjiumamhrdswINso7DQgvS3qo522lFu1g0KXZzy0J+SecqyUX7O8rbwg8qkS66zI0YpUQfqQWP7SjWIjelvMhOQGf10BjcWhd4lhTOdXSXCz55fV0sJPASKmrXrwMM5w3Zf/duP/oUIVoKnEzUvWlpBkbUfDmnYfgIQx45cpqq/GRDwVQkRAfHcq1mWrFuNlCvdT4XByrlvgRPE4KFZKheruEfBB7CRwmSfvCcYQSyf/hQjY+9RmtyRA0+7ATckKxX1zQ== 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 Wed, Mar 1, 2023 at 1:35=E2=80=AFAM 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=3D0, 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 and associated flags. > > Signed-off-by: Peter Collingbourne > Link: https://linux-review.googlesource.com/id/I57f825f2eaeaf7e8389d6cf45= 97c8a5821359838 > --- > v3: > - update comments > > v2: > - also remove GFP_SKIP_KASAN_POISON and FPI_SKIP_KASAN_POISON > - rename GFP_SKIP_KASAN_UNPOISON to GFP_SKIP_KASAN > - update comments > - simplify control flow by removing reset_tags > > include/linux/gfp_types.h | 30 ++++++------- > include/linux/page-flags.h | 9 ---- > include/trace/events/mmflags.h | 12 +---- > mm/kasan/hw_tags.c | 2 +- > mm/page_alloc.c | 81 +++++++++++++--------------------- > mm/vmalloc.c | 2 +- > 6 files changed, 47 insertions(+), 89 deletions(-) > > diff --git a/include/linux/gfp_types.h b/include/linux/gfp_types.h > index 5088637fe5c2..6583a58670c5 100644 > --- a/include/linux/gfp_types.h > +++ b/include/linux/gfp_types.h > @@ -47,16 +47,14 @@ typedef unsigned int __bitwise gfp_t; > #define ___GFP_ACCOUNT 0x400000u > #define ___GFP_ZEROTAGS 0x800000u > #ifdef CONFIG_KASAN_HW_TAGS > -#define ___GFP_SKIP_ZERO 0x1000000u > -#define ___GFP_SKIP_KASAN_UNPOISON 0x2000000u > -#define ___GFP_SKIP_KASAN_POISON 0x4000000u > +#define ___GFP_SKIP_ZERO 0x1000000u > +#define ___GFP_SKIP_KASAN 0x2000000u > #else > -#define ___GFP_SKIP_ZERO 0 > -#define ___GFP_SKIP_KASAN_UNPOISON 0 > -#define ___GFP_SKIP_KASAN_POISON 0 > +#define ___GFP_SKIP_ZERO 0 > +#define ___GFP_SKIP_KASAN 0 > #endif > #ifdef CONFIG_LOCKDEP > -#define ___GFP_NOLOCKDEP 0x8000000u > +#define ___GFP_NOLOCKDEP 0x4000000u > #else > #define ___GFP_NOLOCKDEP 0 > #endif > @@ -234,25 +232,24 @@ typedef unsigned int __bitwise gfp_t; > * memory tags at the same time as zeroing memory has minimal additional > * performace impact. > * > - * %__GFP_SKIP_KASAN_UNPOISON makes KASAN skip unpoisoning on page alloc= ation. > - * Only effective in HW_TAGS mode. > - * > - * %__GFP_SKIP_KASAN_POISON makes KASAN skip poisoning on page deallocat= ion. > - * Typically, used for userspace pages. Only effective in HW_TAGS mode. > + * %__GFP_SKIP_KASAN makes KASAN skip unpoisoning on page allocation. > + * Used for userspace and vmalloc pages; the latter are unpoisoned by > + * kasan_unpoison_vmalloc instead. For userspace pages, results in > + * poisoning being skipped as well, see should_skip_kasan_poison for > + * details. Only effective in HW_TAGS mode. > */ > #define __GFP_NOWARN ((__force gfp_t)___GFP_NOWARN) > #define __GFP_COMP ((__force gfp_t)___GFP_COMP) > #define __GFP_ZERO ((__force gfp_t)___GFP_ZERO) > #define __GFP_ZEROTAGS ((__force gfp_t)___GFP_ZEROTAGS) > #define __GFP_SKIP_ZERO ((__force gfp_t)___GFP_SKIP_ZERO) > -#define __GFP_SKIP_KASAN_UNPOISON ((__force gfp_t)___GFP_SKIP_KASAN_UNPO= ISON) > -#define __GFP_SKIP_KASAN_POISON ((__force gfp_t)___GFP_SKIP_KASAN_POIS= ON) > +#define __GFP_SKIP_KASAN ((__force gfp_t)___GFP_SKIP_KASAN) > > /* Disable lockdep for GFP context tracking */ > #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP) > > /* Room for N __GFP_FOO bits */ > -#define __GFP_BITS_SHIFT (27 + IS_ENABLED(CONFIG_LOCKDEP)) > +#define __GFP_BITS_SHIFT (26 + IS_ENABLED(CONFIG_LOCKDEP)) > #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) > > /** > @@ -335,8 +332,7 @@ typedef unsigned int __bitwise gfp_t; > #define GFP_DMA __GFP_DMA > #define GFP_DMA32 __GFP_DMA32 > #define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM) > -#define GFP_HIGHUSER_MOVABLE (GFP_HIGHUSER | __GFP_MOVABLE | \ > - __GFP_SKIP_KASAN_POISON | __GFP_SKIP_KASAN_UNPOI= SON) > +#define GFP_HIGHUSER_MOVABLE (GFP_HIGHUSER | __GFP_MOVABLE | __GFP_SKI= P_KASAN) > #define GFP_TRANSHUGE_LIGHT ((GFP_HIGHUSER_MOVABLE | __GFP_COMP | \ > __GFP_NOMEMALLOC | __GFP_NOWARN) & ~__GFP_RECLAI= M) > #define GFP_TRANSHUGE (GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM) > 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/mmflag= s.h > index 9db52bc4ce19..232bc8efc98e 100644 > --- a/include/trace/events/mmflags.h > +++ b/include/trace/events/mmflags.h > @@ -55,8 +55,7 @@ > #ifdef CONFIG_KASAN_HW_TAGS > #define __def_gfpflag_names_kasan , \ > gfpflag_string(__GFP_SKIP_ZERO), \ > - gfpflag_string(__GFP_SKIP_KASAN_POISON), \ > - gfpflag_string(__GFP_SKIP_KASAN_UNPOISON) > + gfpflag_string(__GFP_SKIP_KASAN) > #else > #define __def_gfpflag_names_kasan > #endif > @@ -96,12 +95,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 +123,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/kasan/hw_tags.c b/mm/kasan/hw_tags.c > index d1bcb0205327..bb4f56e5bdec 100644 > --- a/mm/kasan/hw_tags.c > +++ b/mm/kasan/hw_tags.c > @@ -318,7 +318,7 @@ void *__kasan_unpoison_vmalloc(const void *start, uns= igned long size, > * Thus, for VM_ALLOC mappings, hardware tag-based KASAN only tag= s > * the first virtual mapping, which is created by vmalloc(). > * Tagging the page_alloc memory backing that vmalloc() allocatio= n is > - * skipped, see ___GFP_SKIP_KASAN_UNPOISON. > + * skipped, see ___GFP_SKIP_KASAN. > * > * For non-VM_ALLOC allocations, page_alloc memory is tagged as u= sual. > */ > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 7136c36c5d01..0db33faf760d 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -112,17 +112,6 @@ typedef int __bitwise fpi_t; > */ > #define FPI_TO_TAIL ((__force fpi_t)BIT(1)) > > -/* > - * Don't poison memory with KASAN (only for the tag-based modes). > - * During boot, all non-reserved memblock memory is exposed to page_allo= c. > - * Poisoning all that memory lengthens boot time, especially on systems = with > - * large amount of RAM. This flag is used to skip that poisoning. > - * This is only done for the tag-based KASAN modes, as those are able to > - * detect memory corruptions with the memory tags assigned by default. > - * All memory allocated normally after boot gets poisoned as usual. > - */ > -#define FPI_SKIP_KASAN_POISON ((__force fpi_t)BIT(2)) > - > /* prevent >1 _updater_ of zone percpu pageset ->high and ->batch fields= */ > static DEFINE_MUTEX(pcp_batch_high_lock); > #define MIN_PERCPU_PAGELIST_HIGH_FRACTION (8) > @@ -1355,13 +1344,19 @@ static int free_tail_pages_check(struct page *hea= d_page, struct page *page) > /* > * Skip KASAN memory poisoning when either: > * > - * 1. Deferred memory initialization has not yet completed, > - * see the explanation below. > - * 2. Skipping poisoning is requested via FPI_SKIP_KASAN_POISON, > - * see the comment next to it. > - * 3. Skipping poisoning is requested via __GFP_SKIP_KASAN_POISON, > - * see the comment next to it. > - * 4. The allocation is excluded from being checked due to sampling, > + * 1. For generic KASAN: deferred memory initialization has not yet comp= leted. > + * Tag-based KASAN modes skip pages freed via deferred memory initial= ization > + * using page tags instead (see below). > + * 2. For tag-based KASAN modes: the page has a match-all KASAN tag, ind= icating > + * that error detection is disabled for accesses via the page address= . > + * > + * Pages will have match-all tags in the following circumstances: > + * > + * 1. Pages are being initialized for the first time, including during d= eferred > + * memory init; see the call to page_kasan_tag_reset in __init_single= _page. > + * 2. The allocation was not unpoisoned due to __GFP_SKIP_KASAN, with th= e > + * exception of pages unpoisoned by kasan_unpoison_vmalloc. > + * 3. The allocation was excluded from being checked due to sampling, > * see the call to kasan_unpoison_pages. > * > * Poisoning pages during deferred memory init will greatly lengthen the > @@ -1377,10 +1372,10 @@ static int free_tail_pages_check(struct page *hea= d_page, struct page *page) > */ > 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); > + if (IS_ENABLED(CONFIG_KASAN_GENERIC)) > + return deferred_pages_enabled(); > + > + return page_kasan_tag(page) =3D=3D 0xff; > } > > static void kernel_init_pages(struct page *page, int numpages) > @@ -1754,7 +1749,7 @@ void __free_pages_core(struct page *page, unsigned = int order) > * Bypass PCP and place fresh pages right to the tail, primarily > * relevant for memory onlining. > */ > - __free_pages_ok(page, order, FPI_TO_TAIL | FPI_SKIP_KASAN_POISON)= ; > + __free_pages_ok(page, order, FPI_TO_TAIL); > } > > #ifdef CONFIG_NUMA > @@ -2456,9 +2451,9 @@ static inline bool should_skip_kasan_unpoison(gfp_t= flags) > > /* > * With hardware tag-based KASAN enabled, skip if this has been > - * requested via __GFP_SKIP_KASAN_UNPOISON. > + * requested via __GFP_SKIP_KASAN. > */ > - return flags & __GFP_SKIP_KASAN_UNPOISON; > + return flags & __GFP_SKIP_KASAN; > } > > static inline bool should_skip_init(gfp_t flags) > @@ -2477,7 +2472,6 @@ inline void post_alloc_hook(struct page *page, unsi= gned int order, > bool init =3D !want_init_on_free() && want_init_on_alloc(gfp_flag= s) && > !should_skip_init(gfp_flags); > bool zero_tags =3D init && (gfp_flags & __GFP_ZEROTAGS); > - bool reset_tags =3D true; > int i; > > set_page_private(page, 0); > @@ -2511,37 +2505,22 @@ inline void post_alloc_hook(struct page *page, un= signed int order, > /* Take note that memory was initialized by the loop abov= e. */ > init =3D false; > } > - if (!should_skip_kasan_unpoison(gfp_flags)) { > - /* Try unpoisoning (or setting tags) and initializing mem= ory. */ > - if (kasan_unpoison_pages(page, order, init)) { > - /* Take note that memory was initialized by KASAN= . */ > - if (kasan_has_integrated_init()) > - init =3D false; > - /* Take note that memory tags were set by KASAN. = */ > - reset_tags =3D 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 memory tags have not been set by KASAN, reset the page tags= to > - * ensure page_address() dereferencing does not fault. > - */ > - if (reset_tags) { > + 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 =3D false; > + } else { > + /* > + * If memory tags have not been set by KASAN, reset the p= age > + * tags to ensure page_address() dereferencing does not f= ault. > + */ > for (i =3D 0; i !=3D 1 << order; ++i) > page_kasan_tag_reset(page + i); > } > /* 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_POIS= ON)) > - SetPageSkipKASanPoison(page); > > set_page_owner(page, order, gfp_flags); > page_table_check_alloc(page, order); > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index ef910bf349e1..b0c84847e9b6 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3170,7 +3170,7 @@ void *__vmalloc_node_range(unsigned long size, unsi= gned long align, > * pages backing VM_ALLOC mapping. Memory is inst= ead > * poisoned and zeroed by kasan_unpoison_vmalloc(= ). > */ > - gfp_mask |=3D __GFP_SKIP_KASAN_UNPOISON | __GFP_S= KIP_ZERO; > + gfp_mask |=3D __GFP_SKIP_KASAN | __GFP_SKIP_ZERO; > } > > /* Take note that the mapping is PAGE_KERNEL. */ > -- > 2.39.2.722.g9855ee24e9-goog > Reviewed-by: Andrey Konovalov Thank you, Peter!