On 2026-04-28 20:59, Hari Bathini wrote:
On 12/04/26 3:44 am, [email protected] wrote:
From: Abhishek Dubey <[email protected]>

Ensure the dummy trampoline address field present between the OOL stub
and the long branch stub is 8-byte aligned, for memory compatibility
when content loaded to a register.

Reported-by: Hari Bathini <[email protected]>
Fixes: d243b62b7bd3 ("powerpc64/bpf: Add support for bpf trampolines")
Cc: [email protected]
Signed-off-by: Abhishek Dubey <[email protected]>
---
  arch/powerpc/net/bpf_jit.h        |  4 ++--
arch/powerpc/net/bpf_jit_comp.c | 34 ++++++++++++++++++++++++++-----
  arch/powerpc/net/bpf_jit_comp64.c |  4 ++--
  3 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h
index 7354e1d72f79..1184ad15d5a4 100644
--- a/arch/powerpc/net/bpf_jit.h
+++ b/arch/powerpc/net/bpf_jit.h
@@ -208,8 +208,8 @@ int bpf_jit_emit_func_call_rel(u32 *image, u32 *fimage, struct codegen_context * int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, u32 *fimage, struct codegen_context *ctx,
                       u32 *addrs, int pass, bool extra_pass);
void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx);
-void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx);
-void bpf_jit_build_fentry_stubs(u32 *image, struct codegen_context *ctx); +void bpf_jit_build_epilogue(u32 *image, u32 *fimage, struct codegen_context *ctx); +void bpf_jit_build_fentry_stubs(u32 *image, u32 *fimage, struct codegen_context *ctx);
  void bpf_jit_realloc_regs(struct codegen_context *ctx);
int bpf_jit_emit_exit_insn(u32 *image, struct codegen_context *ctx, int tmp_reg, long exit_addr); diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index a62a9a92b7b5..c255b30a37b0 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -49,11 +49,34 @@ asm (
  "        .popsection                             ;"
  );
-void bpf_jit_build_fentry_stubs(u32 *image, struct codegen_context *ctx) +void bpf_jit_build_fentry_stubs(u32 *image, u32 *fimage, struct codegen_context *ctx)
  {
        int ool_stub_idx, long_branch_stub_idx;
        /*
+        * In the final pass, align the mis-aligned dummy_tramp_addr field
+        * in the fimage. The alignment NOP must appear before OOL stub,
+        * to make ool_stub_idx & long_branch_stub_idx constant from end.
+        *
+        * Need alignment NOP in following conditions:
+        *

I don't think I follow this table..
I have omitted this table. The new logic emits alignment NOP wrt misalignment detected
for dummy_tramp_addr field.
Please follow the changes at https://lore.kernel.org/bpf/[email protected]

+        * OOL stub aligned     CONFIG_PPC_FTRACE_OUT_OF_LINE   Alignment NOP
+        *      Y                               Y                     N

+        *      Y                               N                     Y

Please help me understand why a NOP is needed here

+        *      N                               Y                     Y

+        *      N                               N                     N

and also, why a NOP isn't needed here..

- Hari
-Abhishek

Reply via email to