Le 16/03/2021 à 04:17, Jordan Niethe a écrit :
From: Russell Currey <rus...@russell.cc>
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.le...@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