From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DEA49351C20; Fri, 29 May 2026 08:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780043148; cv=none; b=bYEEhAjDynXza45UreovLHXZTsaeEMqtgtu7y7CZzWftME+0sWW2aEKGyNe01UhQLEdOHsf7FF4eNRKhTFEyXmZbo40GYc7t29YcetvQUTkFOJWqXkFkDqlc1V+3aiqsUMZ7JZdO57BC4tiwkuE3hbv1e/xKRSm5/b/ih2ES8is= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780043148; c=relaxed/simple; bh=XELYFuViuZqrLLxfdD4PGyPtxf/Au3oWznf3FJ0ages=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=JgCxkleplbZkiv77qmKbb2FmdqLkJ+ygpkL3ya7h2xeyRAfMLlLZGRJAHe99rc6xsSY/9rd0y3vuyMRXeKqz0C9TRbgQ5p8PbVOgbsfNi06e/r1oClOJxnxo/aqjkT2I38ZqevMdSP1npQ2ozzzmT9isDVRXNTIlCXm8Oqegs5A= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=nLeLgcyf; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="nLeLgcyf" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 26BB920E3; Fri, 29 May 2026 01:25:41 -0700 (PDT) Received: from [10.57.91.162] (unknown [10.57.91.162]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EB3B03F632; Fri, 29 May 2026 01:25:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1780043146; bh=XELYFuViuZqrLLxfdD4PGyPtxf/Au3oWznf3FJ0ages=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=nLeLgcyf0k0ldux0TFh1jZXIYKRbC8G2USuqOmM/9EmYadwJutsqHi6rAS3wJ4LeP LQ0tUrmOO60rTr/DJhKXdMc6ZEjfiLBQ3YU7iRkmjIzZx6xkLa0FfaMwWkTN/fTA4l YY6GEpLN1I96rm5mjpzFJBCMsGNrpegHKxst0bvg= Message-ID: <9493da99-3476-4fdd-818b-19e424b46f8e@arm.com> Date: Fri, 29 May 2026 10:25:39 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 08/15] arm64: mm: Permit contiguous attribute for preliminary mappings To: Ard Biesheuvel , linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, will@kernel.org, catalin.marinas@arm.com, mark.rutland@arm.com, Ard Biesheuvel , Ryan Roberts , Anshuman Khandual , Liz Prucka , Seth Jenkins , Kees Cook , Mike Rapoport , David Hildenbrand , Andrew Morton , Jann Horn , linux-mm@kvack.org, linux-hardening@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org References: <20260526175846.2694125-17-ardb+git@google.com> <20260526175846.2694125-25-ardb+git@google.com> From: Kevin Brodsky Content-Language: en-GB In-Reply-To: <20260526175846.2694125-25-ardb+git@google.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 26/05/2026 19:58, Ard Biesheuvel wrote: > From: Ard Biesheuvel > > There are a few cases where we omit the contiguous hint for mappings > that start out as read-write and are remapped read-only later, on the > basis that manipulating live descriptors with the PTE_CONT attribute set > is unsafe. When support for the contiguous hint was added to the code, > the ARM ARM was ambiguous about this, and so we erred on the side of > caution. > > In the meantime, this has been clarified [0], and regions that will be > remapped in their entirety, retaining the contiguous bit on all entries, > can use the contiguous hint both in the initial mapping as well as the > one that replaces it. Note that this requires that the logic that may be > called to remap overlapping regions respects existing valid descriptors > that have the contiguous bit cleared. > > So omit the NO_CONT_MAPPINGS flag in places where it is unneeded. > > Thanks to Ryan for the reference. > > [0] RJQQTC > > For a TLB lookup in a contiguous region mapped by translation table entries that > have consistent values for the Contiguous bit, but have the OA, attributes, or > permissions misprogrammed, that TLB lookup is permitted to produce an OA, access > permissions, and memory attributes that are consistent with any one of the > programmed translation table values. > > Signed-off-by: Ard Biesheuvel Reviewed-by: Kevin Brodsky > --- > arch/arm64/mm/mmu.c | 10 +++------- > 1 file changed, 3 insertions(+), 7 deletions(-) > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 55bb40348a47..04cc579c7a15 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -1016,8 +1016,7 @@ void __init create_mapping_noalloc(phys_addr_t phys, unsigned long virt, > &phys, virt); > return; > } > - early_create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, > - NO_CONT_MAPPINGS); > + early_create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, 0); > } > > void __init create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys, > @@ -1044,8 +1043,7 @@ static void update_mapping_prot(phys_addr_t phys, unsigned long virt, > return; > } > > - early_create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, > - NO_CONT_MAPPINGS); > + early_create_pgd_mapping(init_mm.pgd, phys, virt, size, prot, NULL, 0); > > /* flush the TLBs after updating live kernel mappings */ > flush_tlb_kernel_range(virt, virt + size); > @@ -1191,10 +1189,8 @@ static void __init map_mem(void) > * alternative patching has completed). This makes the contents > * of the region accessible to subsystems such as hibernate, > * but protects it from inadvertent modification or execution. > - * Note that contiguous mappings cannot be remapped in this way, > - * so we should avoid them here. > */ > - __map_memblock(kernel_start, kernel_end, PAGE_KERNEL, NO_CONT_MAPPINGS); > + __map_memblock(kernel_start, kernel_end, PAGE_KERNEL, 0); > memblock_clear_nomap(kernel_start, kernel_end - kernel_start); > } >