Skip to contentSkip to conversation

bpf/selftests: fold test_current_pid_tgid_new_ns into test_progs.

PATCH Superseded Carlos Neira 2 participants 2 messages Dec 28, 2020 – Jan 4, 2021

Subsystems (5)

v11 of 12 Superseded Latest is v12 →

lore
Share & tools
lore
#0 lore raw

PATCH v11 1/1 bpf/selftests: fold test_current_pid_tgid_new_ns into test_progs.

Currently tests for bpf_get_ns_current_pid_tgid() are outside test_progs. This change folds test cases into test_progs.

Changes from v10:

- Code style fixes.
- Remove redundant code.

---
 tools/testing/selftests/bpf/.gitignore        |   1 -
 tools/testing/selftests/bpf/Makefile          |   3 +-
 .../bpf/prog_tests/ns_current_pid_tgid.c      | 118 ++++++-------
 .../bpf/progs/test_ns_current_pid_tgid.c      |  28 +--
 .../bpf/test_current_pid_tgid_new_ns.c        | 160 ------------------
 5 files changed, 69 insertions(+), 241 deletions(-)
 delete mode 100644 tools/testing/selftests/bpf/test_current_pid_tgid_new_ns.c
tools/testing/selftests/bpf/.gitignore +0 -1
index f5b7ef93618c..9abca0616ec0 100644
@@ -26,7 +26,6 @@ test_tcpnotify_user
 test_libbpf
 test_tcp_check_syncookie_user
 test_sysctl
-test_current_pid_tgid_new_ns
 xdping
 test_cpp
 *.skel.h
tools/testing/selftests/bpf/Makefile +1 -2
index 8c33e999319a..886577bc2bb6 100644
@@ -35,8 +35,7 @@ TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_lpm_map test
 	test_sock test_sockmap get_cgroup_id_user test_socket_cookie \
 	test_cgroup_storage \
 	test_netcnt test_tcpnotify_user test_sysctl \
-	test_progs-no_alu32 \
-	test_current_pid_tgid_new_ns
+	test_progs-no_alu32
 
 # Also test bpf-gcc, if present
 ifneq ($(BPF_GCC),)
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +59 -59

144 lines not on this page · raw message

tools/testing/selftests/bpf/progs/test_ns_current_pid_tgid.c +9 -19
index 1dca70a6de2f..0763d49f9c42 100644
@@ -5,31 +5,21 @@
 #include <stdint.h>
 #include <bpf/bpf_helpers.h>
 
-static volatile struct {
-	__u64 dev;
-	__u64 ino;
-	__u64 pid_tgid;
-	__u64 user_pid_tgid;
-} res;
+__u64 user_pid = 0;
+__u64 user_tgid = 0;
+__u64 dev = 0;
+__u64 ino = 0;
 
-SEC("raw_tracepoint/sys_enter")
-int trace(void *ctx)
+SEC("tracepoint/syscalls/sys_enter_nanosleep")
+int handler(const void *ctx)
 {
-	__u64  ns_pid_tgid, expected_pid;
 	struct bpf_pidns_info nsdata;
-	__u32 key = 0;
 
-	if (bpf_get_ns_current_pid_tgid(res.dev, res.ino, &nsdata,
-		   sizeof(struct bpf_pidns_info)))
+	if (bpf_get_ns_current_pid_tgid(dev, ino, &nsdata, sizeof(struct bpf_pidns_info)))
 		return 0;
 
-	ns_pid_tgid = (__u64)nsdata.tgid << 32 | nsdata.pid;
-	expected_pid = res.user_pid_tgid;
-
-	if (expected_pid != ns_pid_tgid)
-		return 0;
-
-	res.pid_tgid = ns_pid_tgid;
+	user_pid = nsdata.pid;
+	user_tgid = nsdata.tgid;
 
 	return 0;
 }
tools/testing/selftests/bpf/test_current_pid_tgid_new_ns.c deleted +0 -160

160 lines not on this page · raw message

Signature · 1 line
2.20.1
#1 lore raw
Quoted 19 lines · Carlos Neira

Currently tests for bpf_get_ns_current_pid_tgid() are outside test_progs. This change folds test cases into test_progs.

Changes from v10:

- Code style fixes.
- Remove redundant code.

---
 tools/testing/selftests/bpf/.gitignore        |   1 -
 tools/testing/selftests/bpf/Makefile          |   3 +-
 .../bpf/prog_tests/ns_current_pid_tgid.c      | 118 ++++++-------
 .../bpf/progs/test_ns_current_pid_tgid.c      |  28 +--
 .../bpf/test_current_pid_tgid_new_ns.c        | 160 ------------------
 5 files changed, 69 insertions(+), 241 deletions(-)
 delete mode 100644 tools/testing/selftests/bpf/test_current_pid_tgid_new_ns.c

[...]

Quoted 17 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +5 -10
-void test_ns_current_pid_tgid(void)
+static int test_current_pid_tgid(void *args)
 {
-       const char *probe_name = "raw_tracepoint/sys_enter";
-       const char *file = "test_ns_current_pid_tgid.o";
-       int err, key = 0, duration = 0;
-       struct bpf_link *link = NULL;
-       struct bpf_program *prog;
-       struct bpf_map *bss_map;
-       struct bpf_object *obj;
-       struct bss bss;
+       struct test_ns_current_pid_tgid__bss  *bss;
+       struct test_ns_current_pid_tgid *skel;
+       int err = 0, duration = 0;
+       pid_t tgid, pid;
        struct stat st;
-       __u64 id;

tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c line 29

Quoted 10 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +2 -6
-
-       obj = bpf_object__open_file(file, NULL);
-       if (CHECK(IS_ERR(obj), "obj_open", "err %ld\n", PTR_ERR(obj)))
-               return;
 
-       err = bpf_object__load(obj);
-       if (CHECK(err, "obj_load", "err %d errno %d\n", err, errno))
+       skel = test_ns_current_pid_tgid__open_and_load();
+       if (CHECK(!skel, "skel_open_load", "failed to load skeleton\n"))
                goto cleanup;

err will be 0 here, and test failure won't be detected (if it happens in a child process), right? please check all the other cases. It might be better to assign err = -1 at the beginning and just assign err = 0 after all tests succeeded, right before the clean up.

Quoted 7 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +2 -3
-       bss_map = bpf_object__find_map_by_name(obj, "test_ns_.bss");
-       if (CHECK(!bss_map, "find_bss_map", "failed\n"))
-               goto cleanup;
+       pid = syscall(SYS_gettid);
+       tgid = getpid();

[...]

tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c line 76

Quoted 8 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +5 -3
-cleanup:
-       bpf_link__destroy(link);
-       bpf_object__close(obj);
+       if (CHECK(waitpid(cpid, &wstatus, 0) == -1, "waitpid", strerror(errno)))
+               exit(EXIT_FAILURE);
+
+       if (CHECK(WEXITSTATUS(wstatus) != 0, "newns_pidtgid", "failed"))
+               exit(EXIT_FAILURE);

this exit will happen in the parent process, which is test_progs test runner itself, right? Which will prematurely stop all of the remaining tests to run. I.e., you can't just exit(), you need to just return and let test_progs keep running.

Quoted 9 lines
tools/testing/selftests/bpf/prog_tests/ns_current_pid_tgid.c +8 -0
+}
+
+void test_ns_current_pid_tgid(void)
+{
+       if (test__start_subtest("ns_current_pid_tgid_root_ns"))
+               test_current_pid_tgid(NULL);
+       if (test__start_subtest("ns_current_pid_tgid_new_ns"))
+               test_ns_current_pid_tgid_new_ns();
 }

[...]