On Mon, 18 Sept 2023 at 16:15, Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > On Mon, 18 Sept 2023 at 15:56, Alexei Starovoitov > <alexei.starovoitov@xxxxxxxxx> wrote: > > > > On Mon, Sep 18, 2023 at 6:54 AM Eric Dumazet <edumazet@xxxxxxxxxx> wrote: > > > > > > On Mon, Sep 18, 2023 at 3:41 PM Alexei Starovoitov > > > <alexei.starovoitov@xxxxxxxxx> wrote: > > > > > > > > On Mon, Sep 18, 2023 at 6:25 AM Eric Dumazet <edumazet@xxxxxxxxxx> wrote: > > > > > > > > > > On Sat, Sep 16, 2023 at 6:59 PM Alexei Starovoitov > > > > > <alexei.starovoitov@xxxxxxxxx> wrote: > > > > > > > > > > > > Hi David, hi Jakub, hi Paolo, hi Eric, > > > > > > > > > > > > The following pull-request contains BPF updates for your *net-next* tree. > > > > > > > > > > > > We've added 73 non-merge commits during the last 9 day(s) which contain > > > > > > a total of 79 files changed, 5275 insertions(+), 600 deletions(-). > > > > > > > > > > > > The main changes are: > > > > > > > > > > > > 1) Basic BTF validation in libbpf, from Andrii Nakryiko. > > > > > > > > > > > > 2) bpf_assert(), bpf_throw(), exceptions in bpf progs, from Kumar Kartikeya Dwivedi. > > > > > > > > > > > > 3) next_thread cleanups, from Oleg Nesterov. > > > > > > > > > > > > 4) Add mcpu=v4 support to arm32, from Puranjay Mohan. > > > > > > > > > > > > 5) Add support for __percpu pointers in bpf progs, from Yonghong Song. > > > > > > > > > > > > 6) Fix bpf tailcall interaction with bpf trampoline, from Leon Hwang. > > > > > > > > > > > > 7) Raise irq_work in bpf_mem_alloc while irqs are disabled to improve refill probabablity, from Hou Tao. > > > > > > > > > > > > Please consider pulling these changes from: > > > > > > > > > > > > git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git > > > > > > > > > > > > > > > > This might have been raised already, but bpf on x86 now depends on > > > > > CONFIG_UNWINDER_ORC ? > > > > > > > > > > $ grep CONFIG_UNWINDER_ORC .config > > > > > # CONFIG_UNWINDER_ORC is not set > > > > > > > > > > $ make ... > > > > > arch/x86/net/bpf_jit_comp.c:3022:58: error: no member named 'sp' in > > > > > 'struct unwind_state' > > > > > if (!addr || !consume_fn(cookie, (u64)addr, > > > > > (u64)state.sp, (u64)state.bp)) > > > > > ~~~~~ ^ > > > > > 1 error generated. > > > > > > > > Kumar, > > > > can probably explain better, > > > > but no the bpf as whole doesn't depend. > > > > One feature needs either ORC or frame unwinder. > > > > It won't work with unwinder_guess. > > > > The build error is a separate issue. > > > > It hasn't been reported before. > > > > > > In my builds, I do have CONFIG_UNWINDER_FRAME_POINTER=y > > > > > > $ grep UNWIND .config > > > # CONFIG_UNWINDER_ORC is not set > > > CONFIG_UNWINDER_FRAME_POINTER=y > > > > > > > > > I note state.sp is only available to CONFIG_UNWINDER_ORC > > > > > > arch/x86/include/asm/unwind.h > > > > > > #if defined(CONFIG_UNWINDER_ORC) > > > bool signal, full_regs; > > > unsigned long sp, bp, ip; > > > struct pt_regs *regs, *prev_regs; > > > #elif defined(CONFIG_UNWINDER_FRAME_POINTER) > > > bool got_irq; > > > unsigned long *bp, *orig_sp, ip; // this is orig_sp , not sp. > > > > Right. Our replies crossed. > > Please ignore this PR. We need to fix this first. > > Hello, > This is my bad. I totally missed it since I initially wrote this patch > and never looked at it again. > I suggest that I send a fix to disable this feature with > CONFIG_UNWINDER_FRAME_POINTER=y, while I work on reenabling it again > for it with a follow up. Hi, I've attached a fix that should disable it for now. I'll work on a follow up to reenable it for this config option. Really sorry about this, I'll try to be more careful going forward.
From e95240ede0cbe3aa35bbb12bf7eb39e93c7c6e61 Mon Sep 17 00:00:00 2001 From: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> Date: Mon, 18 Sep 2023 16:07:27 +0200 Subject: [PATCH] bpf: Disable exceptions when CONFIG_UNWINDER_FRAME_POINTER=y The build with CONFIG_UNWINDER_FRAME_POINTER=y is broken for current exceptions feature as it assumes ORC unwinder specific fields in the unwind_state. Disable exceptions when frame_pointer unwinder is enabled for now. Fixes: fd5d27b70188 ("arch/x86: Implement arch_bpf_stack_walk") Reported-by: Eric Dumazet <edumazet@xxxxxxxxxx> Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> --- arch/x86/net/bpf_jit_comp.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 84005f2114e0..8c10d9abc239 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -3003,16 +3003,15 @@ void bpf_jit_free(struct bpf_prog *prog) bool bpf_jit_supports_exceptions(void) { /* We unwind through both kernel frames (starting from within bpf_throw - * call) and BPF frames. Therefore we require one of ORC or FP unwinder - * to be enabled to walk kernel frames and reach BPF frames in the stack - * trace. + * call) and BPF frames. Therefore we require ORC unwinder to be enabled + * to walk kernel frames and reach BPF frames in the stack trace. */ - return IS_ENABLED(CONFIG_UNWINDER_ORC) || IS_ENABLED(CONFIG_UNWINDER_FRAME_POINTER); + return IS_ENABLED(CONFIG_UNWINDER_ORC); } void arch_bpf_stack_walk(bool (*consume_fn)(void *cookie, u64 ip, u64 sp, u64 bp), void *cookie) { -#if defined(CONFIG_UNWINDER_ORC) || defined(CONFIG_UNWINDER_FRAME_POINTER) +#if defined(CONFIG_UNWINDER_ORC) struct unwind_state state; unsigned long addr; -- 2.41.0