Re: [PATCH v9 3/8] powerpc/kprobes: Mark newly allocated probes as RO
From: Christophe Leroy <hidden>
Date: 2021-03-17 06:12:41
Le 16/03/2021 à 04:17, Jordan Niethe a écrit :
From: Russell Currey <redacted> With CONFIG_STRICT_KERNEL_RWX=y and CONFIG_KPROBES=y, there will be one W+X page at boot by default. This can be tested with CONFIG_PPC_PTDUMP=y and CONFIG_PPC_DEBUG_WX=y set, and checking the kernel log during boot. Add an arch specific insn page allocator which returns RO pages if STRICT_KERNEL_RWX is enabled. This page is only written to with patch_instruction() which is able to write RO pages.
Did you investigate BPF ? The problematic looks more or less similar to kprobe: bpf_jit_compile() in arch/powerpc/net/bpf_jit_comp.c calls module_alloc(), which provides it with PAGE_KERNEL_TEXT memory, ie RWX. That function is only used on PPC32 which still has Classic BPF, and this is about to go away with future series https://patchwork.ozlabs.org/project/linuxppc-dev/cover/cover.1608112796.git.christophe.leroy@csgroup.eu/ PPC64 has Extended BPF instead, and PPC32 will it the future too. bpf_int_jit_compile() in arch/powerpc/net/bpf_jit_comp64.c calls bpf_jit_binary_alloc() which uses bpf_jit_alloc_exec(). bpf_jit_alloc_exec() is a weak function that should be redefined for powerpc I think, more or less like alloc_insn_page() for kprobes. Christophe