Subject: Re: [PATCH v3 1/5] powerpc/bpf: fix alignment of long branch trampoline address

From: adubey <[email-masked]>
Date: Sun, 17 May 2026 23:15:49 +0530

On 2026-04-28 20:59, Hari Bathini wrote:
> On 12/04/26 3:44 am, [email-masked] wrote:
>> From: Abhishek Dubey <[email-masked]>
>> 
>> 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-masked]>
>> Fixes: d243b62b7bd3 ("powerpc64/bpf: Add support for bpf trampolines")
>> Cc: [email-masked]
>> Signed-off-by: Abhishek Dubey <[email-masked]>
>> ---
>>   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-masked]
> 
>> +	 * 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