riscv, bpf: Add BPF exception tables
When a tracing BPF program attempts to read memory without using the bpf_probe_read() helper, the verifier marks the load instruction with the BPF_PROBE_MEM flag. Since the riscv JIT does not currently recognize this flag it falls back to the interpreter. Add support for BPF_PROBE_MEM, by appending an exception table to the BPF program. If the load instruction causes a data abort, the fixup infrastructure finds the exception table and fixes up the fault, by clearing the destination register and jumping over the faulting instruction. A more generic solution would add a "handler" field to the table entry, like on x86 and s390. The same issue in ARM64 is fixed in 80083428 ("bpf, arm64: Add BPF exception tables"). Signed-off-by:Tong Tiangen <tongtiangen@huawei.com> Signed-off-by:
Daniel Borkmann <daniel@iogearbox.net> Tested-by:
Pu Lehui <pulehui@huawei.com> Tested-by:
Björn Töpel <bjorn@kernel.org> Acked-by:
Björn Töpel <bjorn@kernel.org> Link: https://lore.kernel.org/bpf/20211027111822.3801679-1-tongtiangen@huawei.com
Showing
- arch/riscv/mm/extable.c 14 additions, 5 deletionsarch/riscv/mm/extable.c
- arch/riscv/net/bpf_jit.h 1 addition, 0 deletionsarch/riscv/net/bpf_jit.h
- arch/riscv/net/bpf_jit_comp64.c 149 additions, 36 deletionsarch/riscv/net/bpf_jit_comp64.c
- arch/riscv/net/bpf_jit_core.c 13 additions, 6 deletionsarch/riscv/net/bpf_jit_core.c
Please register or sign in to comment