Skip to content

Commit

Permalink
bpf, verifier: Check trampoline target is tail_call_reachable subprog
Browse files Browse the repository at this point in the history
In the x86_64 JIT, tailcall info is propagated through the trampoline when
the target program is tail_call_reachable. However, this propagation is
unnecessary if the target is a main prog, or a subprog that is not
tail_call_reachable.

Since the verifier can determine if a subprog is tail_call_reachable, it
should only propagate tailcall info when the target is subprog and the
subprog is actually tail_call_reachable.

Acked-by: Yonghong Song <[email protected]>
Signed-off-by: Leon Hwang <[email protected]>
  • Loading branch information
Asphaltt authored and Kernel Patches Daemon committed Nov 1, 2024
1 parent 4aa39f9 commit e38269e
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 1 deletion.
1 change: 1 addition & 0 deletions include/linux/bpf.h
Original file line number Diff line number Diff line change
Expand Up @@ -1253,6 +1253,7 @@ struct bpf_attach_target_info {
struct module *tgt_mod;
const char *tgt_name;
const struct btf_type *tgt_type;
bool tgt_tail_call_reachable;
};

#define BPF_DISPATCHER_MAX 48 /* Fits in 2048B */
Expand Down
4 changes: 3 additions & 1 deletion kernel/bpf/verifier.c
Original file line number Diff line number Diff line change
Expand Up @@ -21946,6 +21946,8 @@ int bpf_check_attach_target(struct bpf_verifier_log *log,
bpf_log(log, "Subprog %s doesn't exist\n", tname);
return -EINVAL;
}
tgt_info->tgt_tail_call_reachable = subprog &&
aux->func[subprog]->aux->tail_call_reachable;
if (aux->func && aux->func[subprog]->aux->exception_cb) {
bpf_log(log,
"%s programs cannot attach to exception callback\n",
Expand Down Expand Up @@ -22315,7 +22317,7 @@ static int check_attach_btf_id(struct bpf_verifier_env *env)
if (!tr)
return -ENOMEM;

if (tgt_prog && tgt_prog->aux->tail_call_reachable)
if (tgt_prog && tgt_info.tgt_tail_call_reachable)
tr->flags = BPF_TRAMP_F_TAIL_CALL_CTX;

prog->aux->dst_trampoline = tr;
Expand Down

0 comments on commit e38269e

Please sign in to comment.