1 // SPDX-License-Identifier: GPL-2.0
2 
3 #include <sys/stat.h>
4 #include <sys/sysmacros.h>
5 #include "test_progs.h"
6 #include "cgroup_helpers.h"
7 #include "get_cgroup_id_kern.skel.h"
8 
9 #define TEST_CGROUP "/test-bpf-get-cgroup-id/"
10 
test_cgroup_get_current_cgroup_id(void)11 void test_cgroup_get_current_cgroup_id(void)
12 {
13 	struct get_cgroup_id_kern *skel;
14 	const struct timespec req = {
15 		.tv_sec = 0,
16 		.tv_nsec = 1,
17 	};
18 	int cgroup_fd;
19 	__u64 ucgid;
20 
21 	cgroup_fd = cgroup_setup_and_join(TEST_CGROUP);
22 	if (!ASSERT_OK_FD(cgroup_fd, "cgroup switch"))
23 		return;
24 
25 	skel = get_cgroup_id_kern__open_and_load();
26 	if (!ASSERT_OK_PTR(skel, "load program"))
27 		goto cleanup_cgroup;
28 
29 	if (!ASSERT_OK(get_cgroup_id_kern__attach(skel), "attach bpf program"))
30 		goto cleanup_progs;
31 
32 	skel->bss->expected_pid = getpid();
33 	/* trigger the syscall on which is attached the tested prog */
34 	if (!ASSERT_OK(syscall(__NR_nanosleep, &req, NULL), "nanosleep"))
35 		goto cleanup_progs;
36 
37 	ucgid = get_cgroup_id(TEST_CGROUP);
38 
39 	ASSERT_EQ(skel->bss->cg_id, ucgid, "compare cgroup ids");
40 
41 cleanup_progs:
42 	get_cgroup_id_kern__destroy(skel);
43 cleanup_cgroup:
44 	close(cgroup_fd);
45 	cleanup_cgroup_environment();
46 }
47