Skip to content

Commit dc704d0

Browse files
TropicaoAlexei Starovoitov
authored andcommitted
bpf, arm64: remove structs on stack constraint
While introducing support for 9+ arguments for tracing programs on ARM64, commit 9014cf5 ("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-5be9211768c3@bootlin.com/ [2] https://lore.kernel.org/bpf/CAADnVQ+sj9XhscN9PdmTzjVa7Eif21noAUH3y1K6x5bWcL-5pg@mail.gmail.com/ [3] https://lore.kernel.org/bpf/[email protected]/ Signed-off-by: Alexis Lothoré (eBPF Foundation) <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexei Starovoitov <[email protected]>
1 parent e860a98 commit dc704d0

File tree

1 file changed

+0
-5
lines changed

1 file changed

+0
-5
lines changed

arch/arm64/net/bpf_jit_comp.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2240,11 +2240,6 @@ static int calc_arg_aux(const struct btf_func_model *m,
22402240

22412241
/* the rest arguments are passed through stack */
22422242
for (; i < m->nr_args; i++) {
2243-
/* We can not know for sure about exact alignment needs for
2244-
* struct passed on stack, so deny those
2245-
*/
2246-
if (m->arg_flags[i] & BTF_FMODEL_STRUCT_ARG)
2247-
return -ENOTSUPP;
22482243
stack_slots = (m->arg_size[i] + 7) / 8;
22492244
a->bstack_for_args += stack_slots * 8;
22502245
a->ostack_for_args = a->ostack_for_args + stack_slots * 8;

0 commit comments

Comments
 (0)