[PATCH bpf-next v1 0/7] Fix timed may_goto with private stacks
Siddharth Chintamaneni
sidchintamaneni at gmail.com
Mon Sep 21 09:24:51 PDT 2026
<SNIP>
> I think we can keep this fix local to x86. Would be less churn in the end.
>
> The problem is that x86 switches the BPF frame pointer from RBP to R9 for
> private stacks, but the trampoline still uses RBP. arm64 and powerpc64 keep
> using X25 and R31 respectively for both stack modes, so their trampolines
> already use the right frame pointer.
>
> Instead of changing the generic fixup, can we resolve the pointer in the x86 JIT
> when emitting the call to arch_bpf_timed_may_goto()? We already know whether
> priv_frame_ptr is set there. R10 contains the offset passed through BPF_REG_AX,
> so we can emit:
>
> /* Private stack */
> leaq (%r9, %r10), %r10
>
> /* Normal stack */
> leaq (%rbp, %r10), %r10
>
> Then remove the LEA from the x86 trampoline, as patch 2 already does.
>
make sense! I thought that the remaining arch's have a similar private
stacks approach to x86. I'll give it a try and re-spin the patch.
> This gives bpf_check_timed_may_goto() the same address used by the generated
> loads and stores: the BPF frame pointer plus the counter’s stack offset. For
> normal stacks, we just move the existing calculation into the JIT. For private
> stacks, we use R9 instead of RBP, which fixes the mismatch.
>
> The existing save/restore of R9 around the call should stay. We also leave RBP
> alone, since it is still needed for the native frame chain and unwinding.
>
> I haven’t tested this approach, so it still needs checking with both normal and
> private stacks.
>
> pw-bot: cr
>
> > Siddharth Chintamaneni (7):
> > bpf: Fix timed may_goto stack pointer for private stacks
> > bpf, x86: Use resolved pointer for timed may_goto
> > bpf, arm64: Use resolved pointer for timed may_goto
> > bpf, powerpc64: Use resolved pointer for timed may_goto
> > bpf, riscv: Use resolved pointer for timed may_goto
> > bpf, s390: Use resolved pointer for timed may_goto
> > selftests/bpf: Test timed may_goto with private stacks
> >
> > arch/arm64/net/bpf_timed_may_goto.S | 12 ++------
> > arch/powerpc/net/bpf_timed_may_goto.S | 8 ++---
> > arch/riscv/net/bpf_timed_may_goto.S | 13 ++++----
> > arch/s390/net/bpf_jit_comp.c | 6 ++--
> > arch/s390/net/bpf_timed_may_goto.S | 8 ++---
> > arch/x86/net/bpf_timed_may_goto.S | 6 ----
> > kernel/bpf/fixups.c | 19 ++++++------
> > .../bpf/progs/verifier_bpf_fastcall.c | 30 ++++++++++---------
> > .../selftests/bpf/progs/verifier_may_goto_1.c | 17 ++++++-----
> > .../bpf/progs/verifier_private_stack.c | 19 ++++++++++++
> > 10 files changed, 75 insertions(+), 63 deletions(-)
> >
> >
> > base-commit: d761934c9483ecde93fe99d8705282f716dfee50
>
More information about the linux-riscv
mailing list