From: Ryan Roberts <ryan.roberts@arm.com>
To: Ard Biesheuvel <ardb+git@google.com>, linux-kernel@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org, will@kernel.org,
catalin.marinas@arm.com, mark.rutland@arm.com,
Ard Biesheuvel <ardb@kernel.org>,
Anshuman Khandual <anshuman.khandual@arm.com>,
Liz Prucka <lizprucka@google.com>,
Seth Jenkins <sethjenkins@google.com>,
Kees Cook <kees@kernel.org>,
linux-hardening@vger.kernel.org
Subject: Re: [PATCH v2 05/10] arm64: mm: Preserve non-contiguous descriptors when mapping DRAM
Date: Tue, 27 Jan 2026 09:58:42 +0000 [thread overview]
Message-ID: <1f4fcb81-7b29-4e7d-b2af-5fb06f4faaa2@arm.com> (raw)
In-Reply-To: <20260126092630.1800589-17-ardb+git@google.com>
On 26/01/2026 09:26, Ard Biesheuvel wrote:
> From: Ard Biesheuvel <ardb@kernel.org>
>
> Instead of blindly overwriting existing live entries with the contiguous
> bit cleared when mapping DRAM regions, check whether the contiguous
> region in question starts with a descriptor that has the valid bit set
> and the contiguous bit cleared, and in that case, leave the contiguous
> bit unset on the entire region. This permits the logic of mapping the
> kernel's linear alias to be simplified in a subsequent patch.
>
> Note that not setting the contiguous bit on any of the descriptors in
> the contiguous region can only result in an invalid configuration if it
> was already invalid to begin with.
>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
> ---
> arch/arm64/include/asm/pgtable.h | 4 ++++
> arch/arm64/mm/mmu.c | 6 ++++--
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
> index 64d5f1d9cce9..cb2c4525e49a 100644
> --- a/arch/arm64/include/asm/pgtable.h
> +++ b/arch/arm64/include/asm/pgtable.h
> @@ -224,6 +224,10 @@ static inline pteval_t __phys_to_pte_val(phys_addr_t phys)
> * Returns true if the pte is valid and has the contiguous bit set.
> */
> #define pte_valid_cont(pte) (pte_valid(pte) && pte_cont(pte))
> +/*
> + * Returns true if the pte is valid and has the contiguous bit cleared.
> + */
> +#define pte_valid_noncont(pte) (pte_valid(pte) && !pte_cont(pte))
> /*
> * Could the pte be present in the TLB? We must check mm_tlb_flush_pending
> * so that we don't erroneously return false for pages that have been
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index 28cc3cda042c..d7faa98f427c 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -230,7 +230,8 @@ static int alloc_init_cont_pte(pmd_t *pmdp, unsigned long addr,
>
> /* use a contiguous mapping if the range is suitably aligned */
> if ((((addr | next | phys) & ~CONT_PTE_MASK) == 0) &&
> - (flags & NO_CONT_MAPPINGS) == 0)
> + (flags & NO_CONT_MAPPINGS) == 0 &&
> + !pte_valid_noncont(__ptep_get(ptep)))
> __prot = __pgprot(pgprot_val(prot) | PTE_CONT);
>
> init_pte(ptep, addr, next, phys, __prot);
> @@ -330,7 +331,8 @@ static int alloc_init_cont_pmd(pud_t *pudp, unsigned long addr,
>
> /* use a contiguous mapping if the range is suitably aligned */
> if ((((addr | next | phys) & ~CONT_PMD_MASK) == 0) &&
> - (flags & NO_CONT_MAPPINGS) == 0)
> + (flags & NO_CONT_MAPPINGS) == 0 &&
> + !pte_valid_noncont(pmd_pte(READ_ONCE(*pmdp))))
> __prot = __pgprot(pgprot_val(prot) | PTE_CONT);
>
> ret = init_pmd(pmdp, addr, next, phys, __prot, pgtable_alloc, flags);
next prev parent reply other threads:[~2026-01-27 9:58 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-26 9:26 [PATCH v2 00/10] arm64: Unmap linear alias of kernel data/bss Ard Biesheuvel
2026-01-26 9:26 ` [PATCH v2 01/10] arm64: Move the zero page to rodata Ard Biesheuvel
2026-01-27 9:34 ` Ryan Roberts
2026-01-27 9:49 ` Ard Biesheuvel
2026-01-27 10:03 ` Ryan Roberts
2026-01-27 10:50 ` Ard Biesheuvel
2026-01-26 9:26 ` [PATCH v2 02/10] arm64: Move fixmap page tables to end of kernel image Ard Biesheuvel
2026-01-27 9:42 ` Ryan Roberts
2026-01-26 9:26 ` [PATCH v2 03/10] arm64: mm: Permit contiguous descriptors to be rewritten Ard Biesheuvel
2026-01-27 9:45 ` Ryan Roberts
2026-01-27 15:03 ` Ard Biesheuvel
2026-01-27 16:59 ` Ryan Roberts
2026-01-27 17:02 ` Ard Biesheuvel
2026-01-27 17:37 ` Ryan Roberts
2026-01-26 9:26 ` [PATCH v2 04/10] arm64: mm: Preserve existing table mappings when mapping DRAM Ard Biesheuvel
2026-01-27 9:58 ` Ryan Roberts
2026-01-26 9:26 ` [PATCH v2 05/10] arm64: mm: Preserve non-contiguous descriptors " Ard Biesheuvel
2026-01-27 9:58 ` Ryan Roberts [this message]
2026-01-26 9:26 ` [PATCH v2 06/10] arm64: mm: Remove bogus stop condition from map_mem() loop Ard Biesheuvel
2026-01-27 10:06 ` Ryan Roberts
2026-01-26 9:26 ` [PATCH v2 07/10] arm64: mm: Drop redundant pgd_t* argument from map_mem() Ard Biesheuvel
2026-01-27 10:10 ` Ryan Roberts
2026-01-26 9:26 ` [PATCH v2 08/10] arm64: mm: Don't abuse memblock NOMAP to check for overlaps Ard Biesheuvel
2026-01-27 10:21 ` Ryan Roberts
2026-01-27 10:27 ` Ard Biesheuvel
2026-01-27 10:39 ` Ryan Roberts
2026-01-27 10:47 ` Ard Biesheuvel
2026-01-27 11:00 ` Ryan Roberts
2026-01-27 11:03 ` Ard Biesheuvel
2026-01-27 11:09 ` Ryan Roberts
2026-01-26 9:26 ` [PATCH v2 09/10] arm64: mm: Map the kernel data/bss read-only in the linear map Ard Biesheuvel
2026-01-27 10:33 ` Ryan Roberts
2026-01-27 10:36 ` Ard Biesheuvel
2026-01-27 10:41 ` Ryan Roberts
2026-01-26 9:26 ` [PATCH v2 10/10] arm64: mm: Unmap kernel data/bss entirely from " Ard Biesheuvel
2026-01-27 10:50 ` Ryan Roberts
2026-01-27 10:54 ` Ard Biesheuvel
2026-01-27 11:02 ` Ryan Roberts
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=1f4fcb81-7b29-4e7d-b2af-5fb06f4faaa2@arm.com \
--to=ryan.roberts@arm.com \
--cc=anshuman.khandual@arm.com \
--cc=ardb+git@google.com \
--cc=ardb@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=kees@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizprucka@google.com \
--cc=mark.rutland@arm.com \
--cc=sethjenkins@google.com \
--cc=will@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox