On Wed, Jul 09, 2025 at 10:36:55AM +0200, Alexis Lothoré (eBPF Foundation) wrote: > While introducing support for 9+ arguments for tracing programs on > ARM64, commit 9014cf56f13d ("bpf, arm64: Support up to 12 function > arguments") has also introduced a constraint preventing BPF trampolines > from being generated if the target function consumes a struct argument > passed on stack, because of uncertainties around the exact struct > location: if the struct has been marked as packed or with a custom > alignment, this info is not reflected in BTF data, and so generated > tracing trampolines could read the target function arguments at wrong > offsets. > > This issue is not specific to ARM64: there has been an attempt (see [1]) > to bring the same constraint to other architectures JIT compilers. But > discussions following this attempt led to the move of this constraint > out of the kernel (see [2]): instead of preventing the kernel from > generating trampolines for those functions consuming structs on stack, > it is simpler to just make sure that those functions with uncertain > struct arguments location are not encoded in BTF information, and so > that one can not even attempt to attach a tracing program to such > function. The task is then deferred to pahole (see [3]). > > Now that the constraint is handled by pahole, remove it from the arm64 > JIT compiler to keep it simple. > > [1] > https://lore.kernel.org/bpf/20250613-deny_trampoline_structs_on_stack-v1-0-5be921176...@bootlin.com/ > [2] > https://lore.kernel.org/bpf/caadnvq+sj9xhscn9pdmtzjva7eif21noauh3y1k6x5bwcl-...@mail.gmail.com/ > [3] > https://lore.kernel.org/bpf/20250707-btf_skip_structs_on_stack-v3-0-29569e086...@bootlin.com/ > > Signed-off-by: Alexis Lothoré (eBPF Foundation) <alexis.loth...@bootlin.com> > --- > arch/arm64/net/bpf_jit_comp.c | 5 ----- > 1 file changed, 5 deletions(-)
This is a question born more out of ignorance that insight, but how do we ensure that the version of pahole being used is sufficiently up-to-date that the in-kernel check is not required? Will