<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 >
