BPF List
 help / color / mirror / Atom feed
* [PATCH] selftests/bpf: fix token tests for bpf_object__prepare() probe_loading
@ 2026-05-29  3:16 chenyuan_fl
  2026-05-29  3:39 ` sashiko-bot
                   ` (2 more replies)
  0 siblings, 3 replies; 25+ messages in thread
From: chenyuan_fl @ 2026-05-29  3:16 UTC (permalink / raw)
  To: bpf; +Cc: andrii, eddyz87, ast, daniel, shuah, linux-kselftest, Yuan Chen

From: Yuan Chen <chenyuan@kylinos.cn>

The bpf_object__prepare() function internally calls bpf_object__probe_loading(),
which attempts to load SOCKET_FILTER and TRACEPOINT programs to verify the BPF
environment. Without these permissions in the token, the probe fails and causes
the tests to fail.

Fix the following test cases by adding SOCKET_FILTER and TRACEPOINT permissions:
- obj_priv_map
- obj_priv_prog
- obj_priv_freplace_prog
- obj_priv_freplace_prog_fail
- obj_priv_btf_fail
- obj_priv_btf_success
- obj_priv_implicit_token
- obj_priv_implicit_token_envvar
- obj_priv_prog_kallsyms

Signed-off-by: Yuan Chen <chenyuan@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/token.c  | 68 ++++++++++++++-----
 1 file changed, 51 insertions(+), 17 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/token.c b/tools/testing/selftests/bpf/prog_tests/token.c
index f2f5d36ae00a..25a76e09a3c9 100644
--- a/tools/testing/selftests/bpf/prog_tests/token.c
+++ b/tools/testing/selftests/bpf/prog_tests/token.c
@@ -1168,8 +1168,13 @@ void serial_test_token(void)
 	}
 	if (test__start_subtest("obj_priv_map")) {
 		struct bpffs_opts opts = {
-			.cmds = bit(BPF_MAP_CREATE),
+			/* BPF_PROG_LOAD is needed for bpf_object__probe_loading */
+			.cmds = bit(BPF_MAP_CREATE) | bit(BPF_PROG_LOAD),
 			.maps = bit(BPF_MAP_TYPE_QUEUE),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
+			.attachs = ~0ULL,
 		};
 
 		subtest_userns(&opts, userns_obj_priv_map);
@@ -1177,7 +1182,10 @@ void serial_test_token(void)
 	if (test__start_subtest("obj_priv_prog")) {
 		struct bpffs_opts opts = {
 			.cmds = bit(BPF_PROG_LOAD),
-			.progs = bit(BPF_PROG_TYPE_XDP),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_XDP) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 
@@ -1185,16 +1193,24 @@ void serial_test_token(void)
 	}
 	if (test__start_subtest("obj_priv_freplace_prog")) {
 		struct bpffs_opts opts = {
-			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_PROG_LOAD) | bit(BPF_BTF_GET_FD_BY_ID),
-			.progs = bit(BPF_PROG_TYPE_EXT) | bit(BPF_PROG_TYPE_XDP),
+			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_PROG_LOAD) |
+					bit(BPF_BTF_GET_FD_BY_ID),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_EXT) | bit(BPF_PROG_TYPE_XDP) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 		subtest_userns(&opts, userns_obj_priv_freplace_prog);
 	}
 	if (test__start_subtest("obj_priv_freplace_prog_fail")) {
 		struct bpffs_opts opts = {
-			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_PROG_LOAD) | bit(BPF_BTF_GET_FD_BY_ID),
-			.progs = bit(BPF_PROG_TYPE_EXT) | bit(BPF_PROG_TYPE_XDP),
+			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_PROG_LOAD) |
+					bit(BPF_BTF_GET_FD_BY_ID),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_EXT) | bit(BPF_PROG_TYPE_XDP) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 		subtest_userns(&opts, userns_obj_priv_freplace_prog_fail);
@@ -1204,7 +1220,10 @@ void serial_test_token(void)
 			/* disallow BTF loading */
 			.cmds = bit(BPF_MAP_CREATE) | bit(BPF_PROG_LOAD),
 			.maps = bit(BPF_MAP_TYPE_STRUCT_OPS),
-			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 
@@ -1213,9 +1232,13 @@ void serial_test_token(void)
 	if (test__start_subtest("obj_priv_btf_success")) {
 		struct bpffs_opts opts = {
 			/* allow BTF loading */
-			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_MAP_CREATE) | bit(BPF_PROG_LOAD),
-			.maps = bit(BPF_MAP_TYPE_STRUCT_OPS),
-			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS),
+			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_MAP_CREATE) |
+					bit(BPF_PROG_LOAD),
+			.maps = bit(BPF_MAP_TYPE_STRUCT_OPS) | bit(BPF_MAP_TYPE_ARRAY),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 
@@ -1224,9 +1247,13 @@ void serial_test_token(void)
 	if (test__start_subtest("obj_priv_implicit_token")) {
 		struct bpffs_opts opts = {
 			/* allow BTF loading */
-			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_MAP_CREATE) | bit(BPF_PROG_LOAD),
-			.maps = bit(BPF_MAP_TYPE_STRUCT_OPS),
-			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS),
+			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_MAP_CREATE) |
+					bit(BPF_PROG_LOAD),
+			.maps = bit(BPF_MAP_TYPE_STRUCT_OPS) | bit(BPF_MAP_TYPE_ARRAY),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 
@@ -1235,9 +1262,13 @@ void serial_test_token(void)
 	if (test__start_subtest("obj_priv_implicit_token_envvar")) {
 		struct bpffs_opts opts = {
 			/* allow BTF loading */
-			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_MAP_CREATE) | bit(BPF_PROG_LOAD),
-			.maps = bit(BPF_MAP_TYPE_STRUCT_OPS),
-			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS),
+			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_MAP_CREATE) |
+					bit(BPF_PROG_LOAD),
+			.maps = bit(BPF_MAP_TYPE_STRUCT_OPS) | bit(BPF_MAP_TYPE_ARRAY),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_STRUCT_OPS) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 
@@ -1257,7 +1288,10 @@ void serial_test_token(void)
 		char kptr_restrict_orig[32] = {};
 		struct bpffs_opts opts = {
 			.cmds = bit(BPF_BTF_LOAD) | bit(BPF_PROG_LOAD),
-			.progs = bit(BPF_PROG_TYPE_XDP),
+			/* Allow SOCKET_FILTER and TRACEPOINT for bpf_object__probe_loading */
+			.progs = bit(BPF_PROG_TYPE_XDP) |
+					 bit(BPF_PROG_TYPE_SOCKET_FILTER) |
+					 bit(BPF_PROG_TYPE_TRACEPOINT),
 			.attachs = ~0ULL,
 		};
 
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2026-06-10 16:30 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-29  3:16 [PATCH] selftests/bpf: fix token tests for bpf_object__prepare() probe_loading chenyuan_fl
2026-05-29  3:39 ` sashiko-bot
2026-05-29  3:57 ` bot+bpf-ci
2026-06-04  3:10 ` [PATCH bpf-next v2 0/3] libbpf: fix implicit BPF token handling in loading and feature probes chenyuan_fl
2026-06-04  3:10   ` [PATCH bpf-next v2 1/3] libbpf: Skip bpf_object__probe_loading() when BPF token is in use chenyuan_fl
2026-06-04  4:05     ` bot+bpf-ci
2026-06-04 11:16     ` Mykyta Yatsenko
2026-06-08 18:17       ` Andrii Nakryiko
2026-06-09 13:11         ` [PATCH bpf] " chenyuan_fl
2026-06-09 13:35           ` Mykyta Yatsenko
2026-06-09 13:42           ` bot+bpf-ci
2026-06-04  3:10   ` [PATCH bpf-next v2 2/3] selftests/bpf: Add ARRAY map type to token tests that use struct_ops global data chenyuan_fl
2026-06-04  3:25     ` sashiko-bot
2026-06-08 18:14     ` Andrii Nakryiko
2026-06-04  3:10   ` [PATCH bpf-next v2 3/3] libbpf: fix feature probe failures for implicit BPF tokens chenyuan_fl
2026-06-04  3:27     ` sashiko-bot
2026-06-04  4:05     ` bot+bpf-ci
2026-06-04 14:40     ` Mykyta Yatsenko
2026-06-08 18:18       ` Andrii Nakryiko
2026-06-10 14:50   ` [PATCH bpf-next v3 0/2] libbpf: fix implicit BPF token feature probe failures chenyuan_fl
2026-06-10 14:50     ` [PATCH bpf-next v3 1/2] libbpf: Skip bpf_object__probe_loading() when BPF token is in use chenyuan_fl
2026-06-10 16:30       ` bot+bpf-ci
2026-06-10 14:50     ` [PATCH bpf-next v3 2/2] libbpf: fetch probeable prog type from token for feature probes chenyuan_fl
2026-06-10 15:04       ` sashiko-bot
2026-06-10 16:30       ` bot+bpf-ci

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox