]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
arm64: kprobes: check the return value of set_memory_rox()
authorYang Shi <yang@os.amperecomputing.com>
Tue, 4 Nov 2025 21:49:47 +0000 (13:49 -0800)
committerWill Deacon <will@kernel.org>
Fri, 7 Nov 2025 14:30:22 +0000 (14:30 +0000)
Since commit a166563e7ec3 ("arm64: mm: support large block mapping when
rodata=full"), __change_memory_common has more chance to fail due to
memory allocation failure when splitting page table. So check the return
value of set_memory_rox(), then bail out if it fails otherwise we may have
RW memory mapping for kprobes insn page.

Fixes: 195a1b7d8388 ("arm64: kprobes: call set_memory_rox() for kprobe page")
Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
Reviewed-by: Dev Jain <dev.jain@arm.com>
Signed-off-by: Yang Shi <yang@os.amperecomputing.com>
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/probes/kprobes.c

index 8ab6104a4883dca515ea68041cac608513782a57..43a0361a8bf0451fc54b31fa4e07062ceff75f39 100644 (file)
@@ -49,7 +49,10 @@ void *alloc_insn_page(void)
        addr = execmem_alloc(EXECMEM_KPROBES, PAGE_SIZE);
        if (!addr)
                return NULL;
-       set_memory_rox((unsigned long)addr, 1);
+       if (set_memory_rox((unsigned long)addr, 1)) {
+               execmem_free(addr);
+               return NULL;
+       }
        return addr;
 }