]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
s390/mm: Do not map lowcore with identity mapping
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 7 Aug 2025 15:04:27 +0000 (17:04 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 20 Aug 2025 14:37:28 +0000 (16:37 +0200)
Since the identity mapping is pinned to address zero the lowcore is always
also mapped to address zero, this happens regardless of the relocate_lowcore
command line option. If the option is specified the lowcore is mapped
twice, instead of only once.

This means that NULL pointer accesses will succeed instead of causing an
exception (low address protection still applies, but covers only parts).
To fix this never map the first two pages of physical memory with the
identity mapping.

Fixes: 32db401965f1 ("s390/mm: Pin identity mapping base to zero")
Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/boot/vmem.c

index 1d073acd05a7b882391697ab98727c1514c2beb0..cea3de4dce8c325308774a3a9f01fac7f3ae85f5 100644 (file)
@@ -530,6 +530,9 @@ void setup_vmem(unsigned long kernel_start, unsigned long kernel_end, unsigned l
                         lowcore_address + sizeof(struct lowcore),
                         POPULATE_LOWCORE);
        for_each_physmem_usable_range(i, &start, &end) {
+               /* Do not map lowcore with identity mapping */
+               if (!start)
+                       start = sizeof(struct lowcore);
                pgtable_populate((unsigned long)__identity_va(start),
                                 (unsigned long)__identity_va(end),
                                 POPULATE_IDENTITY);