From: Sean Christopherson <seanjc@google.com>
To: Dave Hansen <dave.hansen@linux.intel.com>,
Andy Lutomirski <luto@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
linux-kernel@vger.kernel.org,
Andrey Ryabinin <ryabinin.a.a@gmail.com>,
Dmitry Vyukov <dvyukov@google.com>
Subject: Re: [PATCH 2/2] x86/mm: Populate KASAN shadow for per-CPU DS buffers in CPU entry area
Date: Wed, 9 Nov 2022 17:50:45 +0000 [thread overview]
Message-ID: <Y2vodSEIrNyxf8wF@google.com> (raw)
In-Reply-To: <20221104220053.1702977-3-seanjc@google.com>
On Fri, Nov 04, 2022, Sean Christopherson wrote:
> Bounce through cea_map_percpu_pages() when setting the initial
> protections for per-CPU DS buffers so that KASAN populates a shadow for
> said mapping. Failure to populate the shadow will result in a
> not-present #PF during KASAN validation if DS buffers are activated
> later on.
>
> Fixes: 9fd429c28073 ("x86/kasan: Map shadow for percpu pages on demand")
> Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
> Cc: Dmitry Vyukov <dvyukov@google.com>
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
> arch/x86/mm/cpu_entry_area.c | 10 ++++------
> 1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/arch/x86/mm/cpu_entry_area.c b/arch/x86/mm/cpu_entry_area.c
> index d831aae94b41..64ae557ceb22 100644
> --- a/arch/x86/mm/cpu_entry_area.c
> +++ b/arch/x86/mm/cpu_entry_area.c
> @@ -91,13 +91,12 @@ void cea_set_pte(void *cea_vaddr, phys_addr_t pa, pgprot_t flags)
> static void __init
> cea_map_percpu_pages(void *cea_vaddr, void *ptr, int pages, pgprot_t prot)
> {
> - phys_addr_t pa = per_cpu_ptr_to_phys(ptr);
> + int nid = ptr ? early_pfn_to_nid(PFN_DOWN(per_cpu_ptr_to_phys(ptr))) : 0;
>
> - kasan_populate_shadow_for_vaddr(cea_vaddr, pages * PAGE_SIZE,
> - early_pfn_to_nid(PFN_DOWN(pa)));
> + kasan_populate_shadow_for_vaddr(cea_vaddr, pages * PAGE_SIZE, nid);
>
> for ( ; pages; pages--, cea_vaddr+= PAGE_SIZE, ptr += PAGE_SIZE)
> - cea_set_pte(cea_vaddr, per_cpu_ptr_to_phys(ptr), prot);
> + cea_set_pte(cea_vaddr, ptr ? per_cpu_ptr_to_phys(ptr) : 0, prot);
Gah, this is broken. If pages > 1, subsequent iterations will generate a non-NULL
ptr. This is likely what the kernel test bot is complaining about[1]. Andrey's
suggestion to map the entire per-CPU area in one go[2] should obviate the need for
special casing the DS buffer. I'll give that a whirl and smush all three of these
mini-series together.
[1] https://lore.kernel.org/all/202211092215.948a1cf3-oliver.sang@intel.com
[2] https://lore.kernel.org/all/b5e31093-ac80-595b-1127-2a3e35913d86@gmail.com
prev parent reply other threads:[~2022-11-09 17:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-04 22:00 [PATCH 0/2] x86/mm: More KASAN per-CPU CEA mapping bug fixes Sean Christopherson
2022-11-04 22:00 ` [PATCH 1/2] x86/mm: Recompute physical address for every page of per-CPU CEA mapping Sean Christopherson
2022-11-04 22:00 ` [PATCH 2/2] x86/mm: Populate KASAN shadow for per-CPU DS buffers in CPU entry area Sean Christopherson
2022-11-09 17:50 ` Sean Christopherson [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y2vodSEIrNyxf8wF@google.com \
--to=seanjc@google.com \
--cc=dave.hansen@linux.intel.com \
--cc=dvyukov@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=peterz@infradead.org \
--cc=ryabinin.a.a@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.