From: Jiri Olsa <jolsa@kernel.org>
To: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>
Cc: bpf@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
Martin KaFai Lau <kafai@fb.com>,
Eduard Zingerman <eddyz87@gmail.com>,
Song Liu <songliubraving@fb.com>, Yonghong Song <yhs@fb.com>,
Menglong Dong <menglong8.dong@gmail.com>,
Steven Rostedt <rostedt@kernel.org>
Subject: [PATCHv4 bpf-next 08/25] bpf: Move sleepable verification code to btf_id_allow_sleepable
Date: Tue, 24 Mar 2026 09:18:29 +0100 [thread overview]
Message-ID: <20260324081846.2334094-9-jolsa@kernel.org> (raw)
In-Reply-To: <20260324081846.2334094-1-jolsa@kernel.org>
Move sleepable verification code to btf_id_allow_sleepable function.
It will be used in following changes.
Adding code to retrieve type's name instead of passing it from
bpf_check_attach_target function, because this function will be
called from another place in following changes and it's easier
to retrieve the name directly in here.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
include/linux/bpf_verifier.h | 3 ++
kernel/bpf/verifier.c | 79 +++++++++++++++++++++---------------
2 files changed, 50 insertions(+), 32 deletions(-)
diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h
index 090aa26d1c98..186726fcf52a 100644
--- a/include/linux/bpf_verifier.h
+++ b/include/linux/bpf_verifier.h
@@ -932,6 +932,9 @@ static inline void bpf_trampoline_unpack_key(u64 key, u32 *obj_id, u32 *btf_id)
*btf_id = key & 0x7FFFFFFF;
}
+int btf_id_allow_sleepable(u32 btf_id, unsigned long addr, const struct bpf_prog *prog,
+ const struct btf *btf);
+
int bpf_check_attach_target(struct bpf_verifier_log *log,
const struct bpf_prog *prog,
const struct bpf_prog *tgt_prog,
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 498132da12e7..0be54f500c66 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -25087,6 +25087,52 @@ static bool is_tracing_multi_id(const struct bpf_prog *prog, u32 btf_id)
return is_tracing_multi(prog->expected_attach_type) && bpf_multi_func_btf_id[0] == btf_id;
}
+int btf_id_allow_sleepable(u32 btf_id, unsigned long addr, const struct bpf_prog *prog,
+ const struct btf *btf)
+{
+ const struct btf_type *t;
+ const char *tname;
+
+ switch (prog->type) {
+ case BPF_PROG_TYPE_TRACING:
+ t = btf_type_by_id(btf, btf_id);
+ if (!t)
+ return -EINVAL;
+ tname = btf_name_by_offset(btf, t->name_off);
+ if (!tname)
+ return -EINVAL;
+
+ /* *.multi sleepable programs will pass initial sleepable check,
+ * the actual attached btf ids are checked later during the link
+ * attachment.
+ */
+ if (is_tracing_multi_id(prog, btf_id))
+ return 0;
+ if (!check_attach_sleepable(btf_id, addr, tname))
+ return 0;
+ /* fentry/fexit/fmod_ret progs can also be sleepable if they are
+ * in the fmodret id set with the KF_SLEEPABLE flag.
+ */
+ else {
+ u32 *flags = btf_kfunc_is_modify_return(btf, btf_id, prog);
+
+ if (flags && (*flags & KF_SLEEPABLE))
+ return 0;
+ }
+ break;
+ case BPF_PROG_TYPE_LSM:
+ /* LSM progs check that they are attached to bpf_lsm_*() funcs.
+ * Only some of them are sleepable.
+ */
+ if (bpf_lsm_is_sleepable_hook(btf_id))
+ return 0;
+ break;
+ default:
+ break;
+ }
+ return -EINVAL;
+}
+
int bpf_check_attach_target(struct bpf_verifier_log *log,
const struct bpf_prog *prog,
const struct bpf_prog *tgt_prog,
@@ -25377,38 +25423,7 @@ int bpf_check_attach_target(struct bpf_verifier_log *log,
}
if (prog->sleepable) {
- ret = -EINVAL;
- switch (prog->type) {
- case BPF_PROG_TYPE_TRACING:
- /* *.multi sleepable programs will pass initial sleepable check,
- * the actual attached btf ids are checked later during the link
- * attachment.
- */
- if (is_tracing_multi_id(prog, btf_id))
- ret = 0;
- if (!check_attach_sleepable(btf_id, addr, tname))
- ret = 0;
- /* fentry/fexit/fmod_ret progs can also be sleepable if they are
- * in the fmodret id set with the KF_SLEEPABLE flag.
- */
- else {
- u32 *flags = btf_kfunc_is_modify_return(btf, btf_id,
- prog);
-
- if (flags && (*flags & KF_SLEEPABLE))
- ret = 0;
- }
- break;
- case BPF_PROG_TYPE_LSM:
- /* LSM progs check that they are attached to bpf_lsm_*() funcs.
- * Only some of them are sleepable.
- */
- if (bpf_lsm_is_sleepable_hook(btf_id))
- ret = 0;
- break;
- default:
- break;
- }
+ ret = btf_id_allow_sleepable(btf_id, addr, prog, btf);
if (ret) {
module_put(mod);
bpf_log(log, "%s is not sleepable\n", tname);
--
2.53.0
next prev parent reply other threads:[~2026-03-24 8:20 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-24 8:18 [PATCHv4 bpf-next 00/25] bpf: tracing_multi link Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 01/25] ftrace: Add ftrace_hash_count function Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 02/25] ftrace: Make ftrace_hash_clear global Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 03/25] bpf: Use mutex lock pool for bpf trampolines Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 04/25] bpf: Add struct bpf_trampoline_ops object Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 05/25] bpf: Add struct bpf_tramp_node object Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 06/25] bpf: Factor fsession link to use struct bpf_tramp_node Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 07/25] bpf: Add multi tracing attach types Jiri Olsa
2026-03-24 8:18 ` Jiri Olsa [this message]
2026-03-24 8:18 ` [PATCHv4 bpf-next 09/25] bpf: Add bpf_trampoline_multi_attach/detach functions Jiri Olsa
2026-03-24 8:58 ` bot+bpf-ci
2026-03-24 14:29 ` Jiri Olsa
2026-03-27 4:18 ` kernel test robot
2026-03-24 8:18 ` [PATCHv4 bpf-next 10/25] bpf: Add support for tracing multi link Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 11/25] bpf: Add support for tracing_multi link cookies Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 12/25] bpf: Add support for tracing_multi link session Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 13/25] bpf: Add support for tracing_multi link fdinfo Jiri Olsa
2026-03-25 6:43 ` Leon Hwang
2026-03-25 21:49 ` Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 14/25] libbpf: Add bpf_object_cleanup_btf function Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 15/25] libbpf: Add bpf_link_create support for tracing_multi link Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 16/25] libbpf: Add btf_type_is_traceable_func function Jiri Olsa
2026-03-24 8:58 ` bot+bpf-ci
2026-03-24 14:29 ` Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 17/25] libbpf: Add support to create tracing multi link Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 18/25] selftests/bpf: Add tracing multi skel/pattern/ids attach tests Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 19/25] selftests/bpf: Add tracing multi skel/pattern/ids module " Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 20/25] selftests/bpf: Add tracing multi intersect tests Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 21/25] selftests/bpf: Add tracing multi cookies test Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 22/25] selftests/bpf: Add tracing multi session test Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 23/25] selftests/bpf: Add tracing multi attach fails test Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 24/25] selftests/bpf: Add tracing multi attach benchmark test Jiri Olsa
2026-03-25 6:45 ` Leon Hwang
2026-03-25 15:11 ` Alexei Starovoitov
2026-03-25 21:48 ` Jiri Olsa
2026-03-25 21:48 ` Jiri Olsa
2026-03-24 8:18 ` [PATCHv4 bpf-next 25/25] selftests/bpf: Add tracing multi attach rollback tests Jiri Olsa
2026-03-25 6:45 ` Leon Hwang
2026-03-25 21:49 ` Jiri Olsa
2026-03-25 6:42 ` [PATCHv4 bpf-next 00/25] bpf: tracing_multi link Leon Hwang
2026-03-25 14:58 ` Leon Hwang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260324081846.2334094-9-jolsa@kernel.org \
--to=jolsa@kernel.org \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=kafai@fb.com \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=menglong8.dong@gmail.com \
--cc=rostedt@kernel.org \
--cc=songliubraving@fb.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox