On Jun 14 2021, Jisheng Zhang wrote: > I think I found the root cause: commit 2bfc6cd81bd ("move kernel mapping > outside of linear mapping") moves BPF JIT region after the kernel: > > #define BPF_JIT_REGION_START PFN_ALIGN((unsigned long)&_end) > > The &_end is unlikely aligned with PMD SIZE, so the front bpf jit region > sits with kernel .data section in one PMD. But kenrel is mapped in PMD SIZE, > so when bpf_jit_binary_lock_ro() is called to make the first bpf jit prog > ROX, we will make part of kernel .data section RO too, so when we write, for example > memset the .data section, MMU will trigger store page fault. > > To fix the issue, we need to make the bpf jit region PMD size aligned by either > patch BPF_JIT_REGION_START to align on PMD size rather than PAGE SIZE, or > something as below patch to move the BPF region before modules region: > > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h > index 9469f464e71a..997b894edbc2 100644 > --- a/arch/riscv/include/asm/pgtable.h > +++ b/arch/riscv/include/asm/pgtable.h > @@ -31,8 +31,8 @@ > #define BPF_JIT_REGION_SIZE (SZ_128M) > #ifdef CONFIG_64BIT > /* KASLR should leave at least 128MB for BPF after the kernel */ > -#define BPF_JIT_REGION_START PFN_ALIGN((unsigned long)&_end) > -#define BPF_JIT_REGION_END (BPF_JIT_REGION_START + BPF_JIT_REGION_SIZE) > +#define BPF_JIT_REGION_START (BPF_JIT_REGION_END - BPF_JIT_REGION_SIZE) > +#define BPF_JIT_REGION_END (MODULES_VADDR) > #else > #define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE) > #define BPF_JIT_REGION_END (VMALLOC_END) > @@ -40,8 +40,8 @@ > > /* Modules always live before the kernel */ > #ifdef CONFIG_64BIT > -#define MODULES_VADDR (PFN_ALIGN((unsigned long)&_end) - SZ_2G) > #define MODULES_END (PFN_ALIGN((unsigned long)&_start)) > +#define MODULES_VADDR (MODULES_END - SZ_128M) > #endif > > > can you please try it? Per my test, the issue is fixed. I can confirm that this fixes the issue. Andreas. -- Andreas Schwab, schwab@xxxxxxxxxxxxxx GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different."