mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
bpf: Prepare architecture JIT support for stack arguments
Add bpf_jit_supports_stack_args() as a weak function defaulting to false. Architectures that implement JIT support for stack arguments override it to return true. Reject BPF functions with more than 5 parameters at verification time if the architecture does not support stack arguments. Acked-by: Puranjay Mohan <puranjay@kernel.org> Signed-off-by: Yonghong Song <yonghong.song@linux.dev> Link: https://lore.kernel.org/r/20260513045054.2390945-1-yonghong.song@linux.dev Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
dc8f1cf678
commit
848d624acf
|
|
@ -1184,6 +1184,7 @@ bool bpf_jit_inlines_helper_call(s32 imm);
|
|||
bool bpf_jit_supports_subprog_tailcalls(void);
|
||||
bool bpf_jit_supports_percpu_insn(void);
|
||||
bool bpf_jit_supports_kfunc_call(void);
|
||||
bool bpf_jit_supports_stack_args(void);
|
||||
bool bpf_jit_supports_far_kfunc_call(void);
|
||||
bool bpf_jit_supports_exceptions(void);
|
||||
bool bpf_jit_supports_ptr_xchg(void);
|
||||
|
|
|
|||
|
|
@ -7870,8 +7870,14 @@ int btf_prepare_func_args(struct bpf_verifier_env *env, int subprog)
|
|||
MAX_BPF_FUNC_ARGS, tname, nargs);
|
||||
return -EFAULT;
|
||||
}
|
||||
if (nargs > MAX_BPF_FUNC_REG_ARGS)
|
||||
if (nargs > MAX_BPF_FUNC_REG_ARGS) {
|
||||
if (!bpf_jit_supports_stack_args()) {
|
||||
bpf_log(log, "JIT does not support function %s() with %d args\n",
|
||||
tname, nargs);
|
||||
return -EFAULT;
|
||||
}
|
||||
sub->stack_arg_cnt = nargs - MAX_BPF_FUNC_REG_ARGS;
|
||||
}
|
||||
|
||||
if (is_global && nargs > MAX_BPF_FUNC_REG_ARGS) {
|
||||
bpf_log(log, "global function %s has %d > %d args, stack args not supported\n",
|
||||
|
|
|
|||
|
|
@ -3217,6 +3217,11 @@ bool __weak bpf_jit_supports_kfunc_call(void)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool __weak bpf_jit_supports_stack_args(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool __weak bpf_jit_supports_far_kfunc_call(void)
|
||||
{
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user