s390/kasan: make shadow memory noexec
authorVasily Gorbik <gor@linux.ibm.com>
Thu, 10 Sep 2020 20:25:13 +0000 (22:25 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Mon, 14 Sep 2020 09:38:35 +0000 (11:38 +0200)
ARCH_HAS_DEBUG_WX feature support brought attention to the fact that
currently initial kasan shadow memory mapped without noexec flag. So fix that.

Temporary initial identity mapping is still created without noexec, but
it is replaced by properly set up paging later.

Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/mm/kasan_init.c

index 99dd1c63a065f8f8b366dc852081366c57adf782..1a27a71433495c53c1915647b8e994942f25327b 100644 (file)
@@ -99,8 +99,12 @@ static void __init kasan_early_vmemmap_populate(unsigned long address,
        pgt_prot_zero = pgprot_val(PAGE_KERNEL_RO);
        if (!has_nx)
                pgt_prot_zero &= ~_PAGE_NOEXEC;
-       pgt_prot = pgprot_val(PAGE_KERNEL_EXEC);
-       sgt_prot = pgprot_val(SEGMENT_KERNEL_EXEC);
+       pgt_prot = pgprot_val(PAGE_KERNEL);
+       sgt_prot = pgprot_val(SEGMENT_KERNEL);
+       if (!has_nx || mode == POPULATE_ONE2ONE) {
+               pgt_prot &= ~_PAGE_NOEXEC;
+               sgt_prot &= ~_SEGMENT_ENTRY_NOEXEC;
+       }
 
        while (address < end) {
                pg_dir = pgd_offset_k(address);