mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
bpf: add missing fsession to the verifier log
The fsession attach type is missed in the verifier log in check_get_func_ip(), bpf_check_attach_target() and check_attach_btf_id(). Update them to make the verifier log proper. Meanwhile, update the corresponding selftests. Acked-by: Leon Hwang <leon.hwang@linux.dev> Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn> Link: https://lore.kernel.org/r/20260412060346.142007-2-dongml2@chinatelecom.cn Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Alexei Starovoitov
parent
46ffc1f782
commit
9fd19e3ed7
@@ -10152,7 +10152,7 @@ static int check_get_func_ip(struct bpf_verifier_env *env)
|
|||||||
|
|
||||||
if (type == BPF_PROG_TYPE_TRACING) {
|
if (type == BPF_PROG_TYPE_TRACING) {
|
||||||
if (!bpf_prog_has_trampoline(env->prog)) {
|
if (!bpf_prog_has_trampoline(env->prog)) {
|
||||||
verbose(env, "func %s#%d supported only for fentry/fexit/fmod_ret programs\n",
|
verbose(env, "func %s#%d supported only for fentry/fexit/fsession/fmod_ret programs\n",
|
||||||
func_id_name(func_id), func_id);
|
func_id_name(func_id), func_id);
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
}
|
}
|
||||||
@@ -19135,7 +19135,7 @@ int bpf_check_attach_target(struct bpf_verifier_log *log,
|
|||||||
btf = tgt_prog ? tgt_prog->aux->btf : prog->aux->attach_btf;
|
btf = tgt_prog ? tgt_prog->aux->btf : prog->aux->attach_btf;
|
||||||
if (!btf) {
|
if (!btf) {
|
||||||
bpf_log(log,
|
bpf_log(log,
|
||||||
"FENTRY/FEXIT program can only be attached to another program annotated with BTF\n");
|
"Tracing program can only be attached to another program annotated with BTF\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
t = btf_type_by_id(btf, btf_id);
|
t = btf_type_by_id(btf, btf_id);
|
||||||
@@ -19171,7 +19171,7 @@ int bpf_check_attach_target(struct bpf_verifier_log *log,
|
|||||||
if (aux->func && aux->func[subprog]->aux->exception_cb) {
|
if (aux->func && aux->func[subprog]->aux->exception_cb) {
|
||||||
bpf_log(log,
|
bpf_log(log,
|
||||||
"%s programs cannot attach to exception callback\n",
|
"%s programs cannot attach to exception callback\n",
|
||||||
prog_extension ? "Extension" : "FENTRY/FEXIT");
|
prog_extension ? "Extension" : "Tracing");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
conservative = aux->func_info_aux[subprog].unreliable;
|
conservative = aux->func_info_aux[subprog].unreliable;
|
||||||
@@ -19260,7 +19260,7 @@ int bpf_check_attach_target(struct bpf_verifier_log *log,
|
|||||||
case BPF_TRACE_RAW_TP:
|
case BPF_TRACE_RAW_TP:
|
||||||
if (tgt_prog) {
|
if (tgt_prog) {
|
||||||
bpf_log(log,
|
bpf_log(log,
|
||||||
"Only FENTRY/FEXIT progs are attachable to another BPF prog\n");
|
"Only FENTRY/FEXIT/FSESSION progs are attachable to another BPF prog\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
if (!btf_type_is_typedef(t)) {
|
if (!btf_type_is_typedef(t)) {
|
||||||
@@ -19526,7 +19526,7 @@ static int check_attach_btf_id(struct bpf_verifier_env *env)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (prog->sleepable && !can_be_sleepable(prog)) {
|
if (prog->sleepable && !can_be_sleepable(prog)) {
|
||||||
verbose(env, "Only fentry/fexit/fmod_ret, lsm, iter, uprobe, and struct_ops programs can be sleepable\n");
|
verbose(env, "Only fentry/fexit/fsession/fmod_ret, lsm, iter, uprobe, and struct_ops programs can be sleepable\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ static void test_exceptions_success(void)
|
|||||||
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
||||||
"exception_cb_mod"), "set_attach_target"))
|
"exception_cb_mod"), "set_attach_target"))
|
||||||
goto done;
|
goto done;
|
||||||
}), "FENTRY/FEXIT programs cannot attach to exception callback", 0);
|
}), "Tracing programs cannot attach to exception callback", 0);
|
||||||
|
|
||||||
if (test__start_subtest("throwing fentry -> exception_cb"))
|
if (test__start_subtest("throwing fentry -> exception_cb"))
|
||||||
RUN_EXT(-EINVAL, true, ({
|
RUN_EXT(-EINVAL, true, ({
|
||||||
@@ -138,7 +138,7 @@ static void test_exceptions_success(void)
|
|||||||
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
||||||
"exception_cb_mod"), "set_attach_target"))
|
"exception_cb_mod"), "set_attach_target"))
|
||||||
goto done;
|
goto done;
|
||||||
}), "FENTRY/FEXIT programs cannot attach to exception callback", 0);
|
}), "Tracing programs cannot attach to exception callback", 0);
|
||||||
|
|
||||||
if (test__start_subtest("non-throwing fexit -> exception_cb"))
|
if (test__start_subtest("non-throwing fexit -> exception_cb"))
|
||||||
RUN_EXT(-EINVAL, true, ({
|
RUN_EXT(-EINVAL, true, ({
|
||||||
@@ -148,7 +148,7 @@ static void test_exceptions_success(void)
|
|||||||
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
||||||
"exception_cb_mod"), "set_attach_target"))
|
"exception_cb_mod"), "set_attach_target"))
|
||||||
goto done;
|
goto done;
|
||||||
}), "FENTRY/FEXIT programs cannot attach to exception callback", 0);
|
}), "Tracing programs cannot attach to exception callback", 0);
|
||||||
|
|
||||||
if (test__start_subtest("throwing fexit -> exception_cb"))
|
if (test__start_subtest("throwing fexit -> exception_cb"))
|
||||||
RUN_EXT(-EINVAL, true, ({
|
RUN_EXT(-EINVAL, true, ({
|
||||||
@@ -158,7 +158,7 @@ static void test_exceptions_success(void)
|
|||||||
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
bpf_program__fd(skel->progs.exception_ext_mod_cb_runtime),
|
||||||
"exception_cb_mod"), "set_attach_target"))
|
"exception_cb_mod"), "set_attach_target"))
|
||||||
goto done;
|
goto done;
|
||||||
}), "FENTRY/FEXIT programs cannot attach to exception callback", 0);
|
}), "Tracing programs cannot attach to exception callback", 0);
|
||||||
|
|
||||||
if (test__start_subtest("throwing extension (with custom cb) -> exception_cb"))
|
if (test__start_subtest("throwing extension (with custom cb) -> exception_cb"))
|
||||||
RUN_EXT(-EINVAL, true, ({
|
RUN_EXT(-EINVAL, true, ({
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
.expected_attach_type = BPF_TRACE_RAW_TP,
|
.expected_attach_type = BPF_TRACE_RAW_TP,
|
||||||
.kfunc = "sched_switch",
|
.kfunc = "sched_switch",
|
||||||
.result = REJECT,
|
.result = REJECT,
|
||||||
.errstr = "Only fentry/fexit/fmod_ret, lsm, iter, uprobe, and struct_ops programs can be sleepable",
|
.errstr = "Only fentry/fexit/fsession/fmod_ret, lsm, iter, uprobe, and struct_ops programs can be sleepable",
|
||||||
.flags = BPF_F_SLEEPABLE,
|
.flags = BPF_F_SLEEPABLE,
|
||||||
.runs = -1,
|
.runs = -1,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user