Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory
@ 2026-05-13  1:02 liulhong617
  2026-07-16 14:01 ` Will Deacon
  2026-08-06 17:11 ` Will Deacon
  0 siblings, 2 replies; 7+ messages in thread
From: liulhong617 @ 2026-05-13  1:02 UTC (permalink / raw)
  To: catalin.marinas, will; +Cc: linux-arm-kernel, linux-kernel, liulhong617

From: liulhong617 <liulhong617@gmail.com>

When reserved-memory regions with the "no-map" property are not
page-aligned, the kernel may accidentally map them into the linear
mapping, contradicting the no-map semantics.

The root cause is a mismatch between /proc/iomem's address boundaries
and the actual page table mapping boundaries:

1. /proc/iomem derives its ranges from memblock via
   memblock_region_reserved_base_pfn/memblock_region_reserved_end_pfn,
   which perform PFN rounding so the displayed boundaries are
   page-aligned. This gives the impression that the no-map region
   occupies whole pages.

2. However, memblock_mark_nomap() splits memblock.memory regions at
   exact byte boundaries (memblock_isolate_range preserves raw DT
   base/size with no alignment). When for_each_mem_range iterates the
   non-NOMAP regions adjacent to a no-map region, it returns start/end
   values that are NOT page-aligned — they are the precise byte
   boundaries from the memblock split.

3. These sub-page-aligned values are passed to
   __create_pgd_mapping_locked(), which does:
     phys &= PAGE_MASK;
     addr = virt & PAGE_MASK;
     end = PAGE_ALIGN(virt + size);
   The downward rounding of phys via PAGE_MASK extends the mapped
   range backward into the adjacent no-map region, effectively
   including no-map memory in the linear mapping.

For example, with 64K pages, reserved_region@A2000000 (base=0xA2000000,
size=0x8000, no-map) causes for_each_mem_range to return
start=0xA2008000 for the next mappable region. After phys &= PAGE_MASK,
the actual mapping starts at 0xA2000000 — the entire no-map region is
incorrectly mapped.

Fix this by rounding the mappable range inward to PAGE_SIZE boundaries
before passing it to __map_memblock: start is rounded UP and end is
rounded DOWN. This ensures the mapped area never overlaps with adjacent
no-map regions. The cost is at most one page of unmapped gap at each
boundary, which is preferable to violating no-map semantics.

Signed-off-by: liulhong617 <liulhong617@gmail.com>
---
 arch/arm64/mm/mmu.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index dd85e093f..bc8ac7622 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -1175,6 +1175,20 @@ static void __init map_mem(pgd_t *pgdp)
 	for_each_mem_range(i, &start, &end) {
 		if (start >= end)
 			break;
+		/*
+		 * for_each_mem_range may return sub-page-aligned boundaries
+		 * after memblock_mark_nomap() splits regions at byte precision.
+		 * __create_pgd_mapping_locked aligns phys down to PAGE_MASK,
+		 * which could accidentally map no-map memory on the boundary.
+		 * Round the mappable range inward: start UP, end DOWN, so
+		 * that the mapped area never overlaps with adjacent no-map
+		 * regions. The cost is at most one page of unmapped gap at
+		 * each boundary.
+		 */
+		start = PAGE_ALIGN(start);
+		end = end & PAGE_MASK;
+		if (start >= end)
+			continue;
 		/*
 		 * The linear map must allow allocation tags reading/writing
 		 * if MTE is present. Otherwise, it has the same attributes as
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory
  2026-05-13  1:02 [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory liulhong617
@ 2026-07-16 14:01 ` Will Deacon
  2026-07-27  1:55   ` Lianghong Liu
  2026-08-04 14:24   ` Ard Biesheuvel
  2026-08-06 17:11 ` Will Deacon
  1 sibling, 2 replies; 7+ messages in thread
From: Will Deacon @ 2026-07-16 14:01 UTC (permalink / raw)
  To: liulhong617, ardb
  Cc: catalin.marinas, linux-arm-kernel, linux-kernel, liulhong617

[+Ard]

On Wed, May 13, 2026 at 09:02:55AM +0800, liulhong617@163.com wrote:
> From: liulhong617 <liulhong617@gmail.com>
> 
> When reserved-memory regions with the "no-map" property are not
> page-aligned, the kernel may accidentally map them into the linear
> mapping, contradicting the no-map semantics.

Crikey, I wonder what the semantics are for "no-map" if the region isn't
page aligned? If the remaining part of the page is advertised as memory
but doesn't have the "no-map" property, then we can't really satisfy
what we're being asked to do.

> The root cause is a mismatch between /proc/iomem's address boundaries
> and the actual page table mapping boundaries:
> 
> 1. /proc/iomem derives its ranges from memblock via
>    memblock_region_reserved_base_pfn/memblock_region_reserved_end_pfn,
>    which perform PFN rounding so the displayed boundaries are
>    page-aligned. This gives the impression that the no-map region
>    occupies whole pages.
> 
> 2. However, memblock_mark_nomap() splits memblock.memory regions at
>    exact byte boundaries (memblock_isolate_range preserves raw DT
>    base/size with no alignment). When for_each_mem_range iterates the
>    non-NOMAP regions adjacent to a no-map region, it returns start/end
>    values that are NOT page-aligned — they are the precise byte
>    boundaries from the memblock split.
> 
> 3. These sub-page-aligned values are passed to
>    __create_pgd_mapping_locked(), which does:
>      phys &= PAGE_MASK;
>      addr = virt & PAGE_MASK;
>      end = PAGE_ALIGN(virt + size);
>    The downward rounding of phys via PAGE_MASK extends the mapped
>    range backward into the adjacent no-map region, effectively
>    including no-map memory in the linear mapping.
> 
> For example, with 64K pages, reserved_region@A2000000 (base=0xA2000000,
> size=0x8000, no-map) causes for_each_mem_range to return
> start=0xA2008000 for the next mappable region. After phys &= PAGE_MASK,
> the actual mapping starts at 0xA2000000 — the entire no-map region is
> incorrectly mapped.
> 
> Fix this by rounding the mappable range inward to PAGE_SIZE boundaries
> before passing it to __map_memblock: start is rounded UP and end is
> rounded DOWN. This ensures the mapped area never overlaps with adjacent
> no-map regions. The cost is at most one page of unmapped gap at each
> boundary, which is preferable to violating no-map semantics.
> 
> Signed-off-by: liulhong617 <liulhong617@gmail.com>
> ---
>  arch/arm64/mm/mmu.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> index dd85e093f..bc8ac7622 100644
> --- a/arch/arm64/mm/mmu.c
> +++ b/arch/arm64/mm/mmu.c
> @@ -1175,6 +1175,20 @@ static void __init map_mem(pgd_t *pgdp)
>  	for_each_mem_range(i, &start, &end) {
>  		if (start >= end)
>  			break;
> +		/*
> +		 * for_each_mem_range may return sub-page-aligned boundaries
> +		 * after memblock_mark_nomap() splits regions at byte precision.
> +		 * __create_pgd_mapping_locked aligns phys down to PAGE_MASK,
> +		 * which could accidentally map no-map memory on the boundary.
> +		 * Round the mappable range inward: start UP, end DOWN, so
> +		 * that the mapped area never overlaps with adjacent no-map
> +		 * regions. The cost is at most one page of unmapped gap at
> +		 * each boundary.
> +		 */
> +		start = PAGE_ALIGN(start);
> +		end = end & PAGE_MASK;
> +		if (start >= end)
> +			continue;

Maybe I'm over-worrying here, but I've seen firmware describe parts of
memory as lots of small, adjacent regions in some cases and so I'm
worried we'd fail to map the pages with this change.

I'd be more in favour of detecting sub-page sized "no-map" regions that
are adjacent to normal memory regions, emitting a warning/firmware taint
and then doing... precisely nothing about it. What practical issues are
you seeing on your system?

Will


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory
  2026-07-16 14:01 ` Will Deacon
@ 2026-07-27  1:55   ` Lianghong Liu
  2026-08-04 13:41     ` Will Deacon
  2026-08-04 14:24   ` Ard Biesheuvel
  1 sibling, 1 reply; 7+ messages in thread
From: Lianghong Liu @ 2026-07-27  1:55 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: will, ardb, Lianghong Liu

Hi Will,

Thanks for the review. Quick answers to the two open questions.

## What I'm seeing on my system

64K pages (PAGE_SHIFT=16). A no-map reserved region at 0xA2000000 with
size 0x8000 (32 KiB, sub-page). The linear map should skip that hole and
start at 0xA2008000; instead it starts at 0xA2000000 — the whole no-map
region is mapped with PAGE_KERNEL. Debug print in
__create_pgd_mapping_locked():

  create_pgd_mapping: phys 0xa2008000 ...
    after PAGE_MASK align: phys 0xa2000000 - 0xab000000   <- start rounded DOWN into no-map

Cause: for_each_mem_range skips MEMBLOCK_NOMAP regions via
should_skip_region(), but memblock_mark_nomap() splits at byte
boundaries in memblock_isolate_range() (rgn->base = base), so the
*adjacent* region is returned with a sub-page-aligned start/end. That
value then hits
  phys &= PAGE_MASK;
in __create_pgd_mapping_locked(), which rounds the start DOWN and pulls
the mapping back into the no-map page.

So this is a real isolation break, not cosmetic: no-map memory the
firmware asked to leave untouched ends up read/writable in the linear
region.

## On "we might fail to map legitimately mappable pages"

The inward rounding can't lose any page the allocator owns. The buddy
release path uses the exact same inward PFN rounding in
__free_memory_core():
  start_pfn = PFN_UP(start);
  end_pfn   = min(PFN_DOWN(end), max_low_pfn);
  if (start_pfn >= end_pfn) return 0;

So the sub-page sliver at a no-map boundary is never handed to the
allocator and has no struct page backing it — the linear map currently
over-maps bytes the allocator already doesn't manage. The patch just
aligns the linear map to the allocator's own notion of the region, so
no mappable page goes unmapped that isn't already unmapped today.

## On "warn + do nothing"

Happy to add a WARN_ON for a sub-page no-map region adjacent to mappable
memory — useful as a firmware-compat signal — but a warning alone leaves
the no-map memory mapped, so I'd keep the inward rounding with it. If
that reasoning holds I'll send v2 with the WARN added.

Thanks,
Lianghong Liu



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory
  2026-07-27  1:55   ` Lianghong Liu
@ 2026-08-04 13:41     ` Will Deacon
  0 siblings, 0 replies; 7+ messages in thread
From: Will Deacon @ 2026-08-04 13:41 UTC (permalink / raw)
  To: Lianghong Liu; +Cc: linux-arm-kernel, ardb

On Mon, Jul 27, 2026 at 09:55:58AM +0800, Lianghong Liu wrote:
> Thanks for the review. Quick answers to the two open questions.
> 
> ## What I'm seeing on my system
> 
> 64K pages (PAGE_SHIFT=16). A no-map reserved region at 0xA2000000 with
> size 0x8000 (32 KiB, sub-page). The linear map should skip that hole and
> start at 0xA2008000; instead it starts at 0xA2000000 — the whole no-map
> region is mapped with PAGE_KERNEL. Debug print in
> __create_pgd_mapping_locked():
> 
>   create_pgd_mapping: phys 0xa2008000 ...
>     after PAGE_MASK align: phys 0xa2000000 - 0xab000000   <- start rounded DOWN into no-map
> 
> Cause: for_each_mem_range skips MEMBLOCK_NOMAP regions via
> should_skip_region(), but memblock_mark_nomap() splits at byte
> boundaries in memblock_isolate_range() (rgn->base = base), so the
> *adjacent* region is returned with a sub-page-aligned start/end. That
> value then hits
>   phys &= PAGE_MASK;
> in __create_pgd_mapping_locked(), which rounds the start DOWN and pulls
> the mapping back into the no-map page.
> 
> So this is a real isolation break, not cosmetic: no-map memory the
> firmware asked to leave untouched ends up read/writable in the linear
> region.
> 
> ## On "we might fail to map legitimately mappable pages"
> 
> The inward rounding can't lose any page the allocator owns. The buddy
> release path uses the exact same inward PFN rounding in
> __free_memory_core():
>   start_pfn = PFN_UP(start);
>   end_pfn   = min(PFN_DOWN(end), max_low_pfn);
>   if (start_pfn >= end_pfn) return 0;

Sorry, but I don't understand how this has anything to do with the
question I asked. It looks like you just fed my reply to an LLVM and
pasted the response here.

I'm not convinced your patch is correct and I don't understand your
reply.

Will


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory
  2026-07-16 14:01 ` Will Deacon
  2026-07-27  1:55   ` Lianghong Liu
@ 2026-08-04 14:24   ` Ard Biesheuvel
  2026-08-06 13:16     ` Will Deacon
  1 sibling, 1 reply; 7+ messages in thread
From: Ard Biesheuvel @ 2026-08-04 14:24 UTC (permalink / raw)
  To: Will Deacon, liulhong617
  Cc: Catalin Marinas, linux-arm-kernel, linux-kernel, liulhong617


On Thu, 16 Jul 2026, at 17:01, Will Deacon wrote:
> [+Ard]
>
> On Wed, May 13, 2026 at 09:02:55AM +0800, liulhong617@163.com wrote:
>> From: liulhong617 <liulhong617@gmail.com>
>> 
>> When reserved-memory regions with the "no-map" property are not
>> page-aligned, the kernel may accidentally map them into the linear
>> mapping, contradicting the no-map semantics.
>
> Crikey, I wonder what the semantics are for "no-map" if the region isn't
> page aligned? If the remaining part of the page is advertised as memory
> but doesn't have the "no-map" property, then we can't really satisfy
> what we're being asked to do.
>
>> The root cause is a mismatch between /proc/iomem's address boundaries
>> and the actual page table mapping boundaries:
>> 
>> 1. /proc/iomem derives its ranges from memblock via
>>    memblock_region_reserved_base_pfn/memblock_region_reserved_end_pfn,
>>    which perform PFN rounding so the displayed boundaries are
>>    page-aligned. This gives the impression that the no-map region
>>    occupies whole pages.
>> 
>> 2. However, memblock_mark_nomap() splits memblock.memory regions at
>>    exact byte boundaries (memblock_isolate_range preserves raw DT
>>    base/size with no alignment). When for_each_mem_range iterates the
>>    non-NOMAP regions adjacent to a no-map region, it returns start/end
>>    values that are NOT page-aligned — they are the precise byte
>>    boundaries from the memblock split.
>> 
>> 3. These sub-page-aligned values are passed to
>>    __create_pgd_mapping_locked(), which does:
>>      phys &= PAGE_MASK;
>>      addr = virt & PAGE_MASK;
>>      end = PAGE_ALIGN(virt + size);
>>    The downward rounding of phys via PAGE_MASK extends the mapped
>>    range backward into the adjacent no-map region, effectively
>>    including no-map memory in the linear mapping.
>> 
>> For example, with 64K pages, reserved_region@A2000000 (base=0xA2000000,
>> size=0x8000, no-map) causes for_each_mem_range to return
>> start=0xA2008000 for the next mappable region. After phys &= PAGE_MASK,
>> the actual mapping starts at 0xA2000000 — the entire no-map region is
>> incorrectly mapped.
>> 
>> Fix this by rounding the mappable range inward to PAGE_SIZE boundaries
>> before passing it to __map_memblock: start is rounded UP and end is
>> rounded DOWN. This ensures the mapped area never overlaps with adjacent
>> no-map regions. The cost is at most one page of unmapped gap at each
>> boundary, which is preferable to violating no-map semantics.
>> 
>> Signed-off-by: liulhong617 <liulhong617@gmail.com>
>> ---
>>  arch/arm64/mm/mmu.c | 14 ++++++++++++++
>>  1 file changed, 14 insertions(+)
>> 
>> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
>> index dd85e093f..bc8ac7622 100644
>> --- a/arch/arm64/mm/mmu.c
>> +++ b/arch/arm64/mm/mmu.c
>> @@ -1175,6 +1175,20 @@ static void __init map_mem(pgd_t *pgdp)
>>  	for_each_mem_range(i, &start, &end) {
>>  		if (start >= end)
>>  			break;
>> +		/*
>> +		 * for_each_mem_range may return sub-page-aligned boundaries
>> +		 * after memblock_mark_nomap() splits regions at byte precision.
>> +		 * __create_pgd_mapping_locked aligns phys down to PAGE_MASK,
>> +		 * which could accidentally map no-map memory on the boundary.
>> +		 * Round the mappable range inward: start UP, end DOWN, so
>> +		 * that the mapped area never overlaps with adjacent no-map
>> +		 * regions. The cost is at most one page of unmapped gap at
>> +		 * each boundary.
>> +		 */
>> +		start = PAGE_ALIGN(start);
>> +		end = end & PAGE_MASK;
>> +		if (start >= end)
>> +			continue;
>
> Maybe I'm over-worrying here, but I've seen firmware describe parts of
> memory as lots of small, adjacent regions in some cases and so I'm
> worried we'd fail to map the pages with this change.
>
> I'd be more in favour of detecting sub-page sized "no-map" regions that
> are adjacent to normal memory regions, emitting a warning/firmware taint
> and then doing... precisely nothing about it. What practical issues are
> you seeing on your system?
>

I think this change is conceptually sound: for_each_mem_range() will present
a set of coalesced memory ranges, so any sub-[OS-]page regions will have
been stitched together by this time. The only sane way to handle no-map
regions is to round them outward, even if this might result in issues if the
bootloader is being thick and e.g., puts part of the initramfs (which the
kernel assumes is accessible via the linear map) in a region that remains
unmapped as a result.

I do wonder if it wouldn't be better if __create_pgd_mapping_locked() did
inward rounding, or even better, did no rounding at all, and left it to the
callers to perform the rounding.





^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory
  2026-08-04 14:24   ` Ard Biesheuvel
@ 2026-08-06 13:16     ` Will Deacon
  0 siblings, 0 replies; 7+ messages in thread
From: Will Deacon @ 2026-08-06 13:16 UTC (permalink / raw)
  To: Ard Biesheuvel
  Cc: liulhong617, Catalin Marinas, linux-arm-kernel, linux-kernel,
	liulhong617

On Tue, Aug 04, 2026 at 05:24:33PM +0300, Ard Biesheuvel wrote:
> 
> On Thu, 16 Jul 2026, at 17:01, Will Deacon wrote:
> > [+Ard]
> >
> > On Wed, May 13, 2026 at 09:02:55AM +0800, liulhong617@163.com wrote:
> >> From: liulhong617 <liulhong617@gmail.com>
> >> 
> >> When reserved-memory regions with the "no-map" property are not
> >> page-aligned, the kernel may accidentally map them into the linear
> >> mapping, contradicting the no-map semantics.
> >
> > Crikey, I wonder what the semantics are for "no-map" if the region isn't
> > page aligned? If the remaining part of the page is advertised as memory
> > but doesn't have the "no-map" property, then we can't really satisfy
> > what we're being asked to do.
> >
> >> The root cause is a mismatch between /proc/iomem's address boundaries
> >> and the actual page table mapping boundaries:
> >> 
> >> 1. /proc/iomem derives its ranges from memblock via
> >>    memblock_region_reserved_base_pfn/memblock_region_reserved_end_pfn,
> >>    which perform PFN rounding so the displayed boundaries are
> >>    page-aligned. This gives the impression that the no-map region
> >>    occupies whole pages.
> >> 
> >> 2. However, memblock_mark_nomap() splits memblock.memory regions at
> >>    exact byte boundaries (memblock_isolate_range preserves raw DT
> >>    base/size with no alignment). When for_each_mem_range iterates the
> >>    non-NOMAP regions adjacent to a no-map region, it returns start/end
> >>    values that are NOT page-aligned — they are the precise byte
> >>    boundaries from the memblock split.
> >> 
> >> 3. These sub-page-aligned values are passed to
> >>    __create_pgd_mapping_locked(), which does:
> >>      phys &= PAGE_MASK;
> >>      addr = virt & PAGE_MASK;
> >>      end = PAGE_ALIGN(virt + size);
> >>    The downward rounding of phys via PAGE_MASK extends the mapped
> >>    range backward into the adjacent no-map region, effectively
> >>    including no-map memory in the linear mapping.
> >> 
> >> For example, with 64K pages, reserved_region@A2000000 (base=0xA2000000,
> >> size=0x8000, no-map) causes for_each_mem_range to return
> >> start=0xA2008000 for the next mappable region. After phys &= PAGE_MASK,
> >> the actual mapping starts at 0xA2000000 — the entire no-map region is
> >> incorrectly mapped.
> >> 
> >> Fix this by rounding the mappable range inward to PAGE_SIZE boundaries
> >> before passing it to __map_memblock: start is rounded UP and end is
> >> rounded DOWN. This ensures the mapped area never overlaps with adjacent
> >> no-map regions. The cost is at most one page of unmapped gap at each
> >> boundary, which is preferable to violating no-map semantics.
> >> 
> >> Signed-off-by: liulhong617 <liulhong617@gmail.com>
> >> ---
> >>  arch/arm64/mm/mmu.c | 14 ++++++++++++++
> >>  1 file changed, 14 insertions(+)
> >> 
> >> diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
> >> index dd85e093f..bc8ac7622 100644
> >> --- a/arch/arm64/mm/mmu.c
> >> +++ b/arch/arm64/mm/mmu.c
> >> @@ -1175,6 +1175,20 @@ static void __init map_mem(pgd_t *pgdp)
> >>  	for_each_mem_range(i, &start, &end) {
> >>  		if (start >= end)
> >>  			break;
> >> +		/*
> >> +		 * for_each_mem_range may return sub-page-aligned boundaries
> >> +		 * after memblock_mark_nomap() splits regions at byte precision.
> >> +		 * __create_pgd_mapping_locked aligns phys down to PAGE_MASK,
> >> +		 * which could accidentally map no-map memory on the boundary.
> >> +		 * Round the mappable range inward: start UP, end DOWN, so
> >> +		 * that the mapped area never overlaps with adjacent no-map
> >> +		 * regions. The cost is at most one page of unmapped gap at
> >> +		 * each boundary.
> >> +		 */
> >> +		start = PAGE_ALIGN(start);
> >> +		end = end & PAGE_MASK;
> >> +		if (start >= end)
> >> +			continue;
> >
> > Maybe I'm over-worrying here, but I've seen firmware describe parts of
> > memory as lots of small, adjacent regions in some cases and so I'm
> > worried we'd fail to map the pages with this change.
> >
> > I'd be more in favour of detecting sub-page sized "no-map" regions that
> > are adjacent to normal memory regions, emitting a warning/firmware taint
> > and then doing... precisely nothing about it. What practical issues are
> > you seeing on your system?
> >
> 
> I think this change is conceptually sound: for_each_mem_range() will present
> a set of coalesced memory ranges, so any sub-[OS-]page regions will have
> been stitched together by this time.

Aha, thanks, that's the part I was missing.

> I do wonder if it wouldn't be better if __create_pgd_mapping_locked() did
> inward rounding, or even better, did no rounding at all, and left it to the
> callers to perform the rounding.

I can take this patch for now but maybe somebody can have a play with
that in the future.

Will


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory
  2026-05-13  1:02 [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory liulhong617
  2026-07-16 14:01 ` Will Deacon
@ 2026-08-06 17:11 ` Will Deacon
  1 sibling, 0 replies; 7+ messages in thread
From: Will Deacon @ 2026-08-06 17:11 UTC (permalink / raw)
  To: catalin.marinas, liulhong617
  Cc: kernel-team, Will Deacon, linux-arm-kernel, linux-kernel,
	liulhong617

On Wed, 13 May 2026 09:02:55 +0800, liulhong617@163.com wrote:
> When reserved-memory regions with the "no-map" property are not
> page-aligned, the kernel may accidentally map them into the linear
> mapping, contradicting the no-map semantics.
> 
> The root cause is a mismatch between /proc/iomem's address boundaries
> and the actual page table mapping boundaries:
> 
> [...]

Applied to arm64 (for-next/mm), thanks!

[1/1] arm64: mm: fix accidental linear mapping of no-map reserved memory
      https://git.kernel.org/arm64/c/7ace06a01efa

Cheers,
-- 
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-08-06 17:12 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-13  1:02 [PATCH] arm64: mm: fix accidental linear mapping of no-map reserved memory liulhong617
2026-07-16 14:01 ` Will Deacon
2026-07-27  1:55   ` Lianghong Liu
2026-08-04 13:41     ` Will Deacon
2026-08-04 14:24   ` Ard Biesheuvel
2026-08-06 13:16     ` Will Deacon
2026-08-06 17:11 ` Will Deacon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox