On Fri, Oct 08, 2021 at 04:50:57PM +0300, Ovidiu Panait wrote: > 5.2 upstream commit 716850ab104d ("MIPS: eBPF: Initial eBPF support for MIPS32 > architecture.") introduced eBPF JIT support for MIPS32 and removed the cBPF JIT > interface. However, it was subsequently reverted by the following commits, > bringing back the old cBPF JIT implementation: > f8fffebdea75 ("MIPS: BPF: Disable MIPS32 eBPF JIT") > 36366e367ee9 ("MIPS: BPF: Restore MIPS32 cBPF JIT") > > From 36366e367ee9 ("MIPS: BPF: Restore MIPS32 cBPF JIT") commit message: > """ > ... > Until these problems are resolved, revert the removal of the cBPF JIT > performed by commit 716850ab104d ("MIPS: eBPF: Initial eBPF support for > MIPS32 architecture."). Together with commit f8fffebdea75 ("MIPS: BPF: > Disable MIPS32 eBPF JIT") this restores MIPS32 BPF JIT behavior back to > the same state it was prior to the introduction of the broken eBPF JIT > support. > """ > > In 5.4, only f8fffebdea75 ("MIPS: BPF: Disable MIPS32 eBPF JIT") was > backported. This patchseries re-enables cBPF JIT support by backporting the > second part of 16850ab104d ("MIPS: eBPF: Initial eBPF support for MIPS32 > architecture.") revert and also fixes CVE-2021-38300. Both patches are clean > cherry-picks. > > The testcase specified in 37cb28ec7d3a ("bpf, mips: Validate conditional > branch offsets") commit message now passes in qemu: > > Before: > ------- > root@qemumips:~# echo 1 > /proc/sys/net/core/bpf_jit_enable > root@qemumips:~# modprobe test_bpf test_name="BPF_MAXINSNS: exec all MSH" > [ 58.577385] test_bpf: #296 BPF_MAXINSNS: exec all MSH > [ 58.579267] ------------[ cut here ]------------ > [ 58.603827] WARNING: CPU: 0 PID: 166 at arch/mips/mm/uasm-mips.c:210 build_insn+0x4e8/0x520 > [ 58.605354] Micro-assembler field overflow > [ 58.606585] Modules linked in: test_bpf(+) i2c_piix4 sch_fq_codel openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 > [ 58.608979] CPU: 0 PID: 166 Comm: modprobe Not tainted 5.4.151-yocto-standard+ #3 > [ 58.610838] Stack : 00000000 00000000 0000010e 1000a400 80f90000 00000045 0000010f 801978cc > [ 58.612647] 80c40000 0000000b 00000000 00000000 80e051d8 1000a400 8d119950 ffffffff > [ 58.615304] 00000000 00000000 81030000 0000010f 00000000 00000000 00000000 0000ffff > [ 58.617685] 00000000 00000000 00000001 0000010f 00000000 80e60000 00000000 80000000 > [ 58.618968] 8d119a8c 00000000 80130000 c0064000 00000000 807742f4 00000001 003871d7 > [ 58.620309] ... > [ 58.621313] Call Trace: > [ 58.622310] [<8010e748>] show_stack+0xb4/0x17c > [ 58.623612] [<80b90cbc>] dump_stack+0xa0/0xcc > [ 58.624755] [<80134a90>] __warn+0xcc/0x11c > [ 58.626008] [<80b85ec0>] warn_slowpath_fmt+0x8c/0xb8 > [ 58.629175] [<80121a18>] build_insn+0x4e8/0x520 > [ 58.630225] [<80121ba4>] uasm_i_bne+0x1c/0x28 > [ 58.687860] [<8012d3a4>] build_body+0x6b8/0x2f38 > [ 58.740612] [<8012fd38>] bpf_jit_compile+0x114/0x1e4 > [ 58.793484] [<809cb584>] bpf_prepare_filter+0x2b0/0x464 > [ 58.843345] [<809cb7b8>] bpf_prog_create+0x80/0xc0 > [ 58.894788] [<c00572d8>] test_bpf_init+0x2d8/0xcf8 [test_bpf] > [ 58.946096] [<80100e50>] do_one_initcall+0x54/0x2c4 > [ 58.992934] [<801d9850>] do_init_module+0x64/0x240 > [ 59.042867] [<801dbc84>] load_module+0x2180/0x27fc > [ 59.093033] [<801dc568>] sys_finit_module+0xe8/0x100 > [ 59.142974] [<80117304>] syscall_common+0x34/0x58 > [ 59.823417] ---[ end trace af3af640ae837a28 ]--- > > After: > ------ > root@qemumips:~# echo 1 > /proc/sys/net/core/bpf_jit_enable > root@qemumips:~# modprobe test_bpf test_name="BPF_MAXINSNS: exec all MSH" > [ 215.882154] test_bpf: #296 BPF_MAXINSNS: exec all MSH jited:0 667558 PASS > [ 216.618220] test_bpf: Summary: 1 PASSED, 0 FAILED, [0/1 JIT'ed] > > Paul Burton (1): > MIPS: BPF: Restore MIPS32 cBPF JIT > > Piotr Krysiuk (1): > bpf, mips: Validate conditional branch offsets > > arch/mips/Kconfig | 1 + > arch/mips/net/Makefile | 1 + > arch/mips/net/bpf_jit.c | 1299 +++++++++++++++++++++++++++++++++++ > arch/mips/net/bpf_jit_asm.S | 285 ++++++++ > 4 files changed, 1586 insertions(+) > create mode 100644 arch/mips/net/bpf_jit.c > create mode 100644 arch/mips/net/bpf_jit_asm.S All now queued up, thanks. greg k-h