mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 10:09:10 +02:00
bpf: Reject stack arguments if tail call reachable
Tail calls are deprecated and will be replaced by indirect calls in the future. Reject programs that combine tail calls with stack arguments rather than adding complexity for a deprecated feature. Signed-off-by: Yonghong Song <yonghong.song@linux.dev> Link: https://lore.kernel.org/r/20260513045109.2392108-1-yonghong.song@linux.dev Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
e0b7b91c72
commit
35b7873316
|
|
@ -5267,14 +5267,23 @@ static int check_max_stack_depth_subprog(struct bpf_verifier_env *env, int idx,
|
|||
* this info will be utilized by JIT so that we will be preserving the
|
||||
* tail call counter throughout bpf2bpf calls combined with tailcalls
|
||||
*/
|
||||
if (tail_call_reachable)
|
||||
if (tail_call_reachable) {
|
||||
for (tmp = idx; tmp >= 0; tmp = dinfo[tmp].caller) {
|
||||
if (subprog[tmp].is_exception_cb) {
|
||||
verbose(env, "cannot tail call within exception cb\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (subprog[tmp].stack_arg_cnt) {
|
||||
verbose(env, "tail_calls are not allowed in programs with stack args\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
subprog[tmp].tail_call_reachable = true;
|
||||
}
|
||||
} else if (!idx && subprog[0].has_tail_call && subprog[0].stack_arg_cnt) {
|
||||
verbose(env, "tail_calls are not allowed in programs with stack args\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (subprog[0].tail_call_reachable)
|
||||
env->prog->aux->tail_call_reachable = true;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user