aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/testing/selftests/bpf/get_cgroup_id_kern.c14
-rw-r--r--tools/testing/selftests/bpf/get_cgroup_id_user.c12
2 files changed, 23 insertions, 3 deletions
diff --git a/tools/testing/selftests/bpf/get_cgroup_id_kern.c b/tools/testing/selftests/bpf/get_cgroup_id_kern.c
index 2cf8cb23f209..014dba10b8a5 100644
--- a/tools/testing/selftests/bpf/get_cgroup_id_kern.c
+++ b/tools/testing/selftests/bpf/get_cgroup_id_kern.c
@@ -11,12 +11,24 @@ struct bpf_map_def SEC("maps") cg_ids = {
11 .max_entries = 1, 11 .max_entries = 1,
12}; 12};
13 13
14struct bpf_map_def SEC("maps") pidmap = {
15 .type = BPF_MAP_TYPE_ARRAY,
16 .key_size = sizeof(__u32),
17 .value_size = sizeof(__u32),
18 .max_entries = 1,
19};
20
14SEC("tracepoint/syscalls/sys_enter_nanosleep") 21SEC("tracepoint/syscalls/sys_enter_nanosleep")
15int trace(void *ctx) 22int trace(void *ctx)
16{ 23{
17 __u32 key = 0; 24 __u32 pid = bpf_get_current_pid_tgid();
25 __u32 key = 0, *expected_pid;
18 __u64 *val; 26 __u64 *val;
19 27
28 expected_pid = bpf_map_lookup_elem(&pidmap, &key);
29 if (!expected_pid || *expected_pid != pid)
30 return 0;
31
20 val = bpf_map_lookup_elem(&cg_ids, &key); 32 val = bpf_map_lookup_elem(&cg_ids, &key);
21 if (val) 33 if (val)
22 *val = bpf_get_current_cgroup_id(); 34 *val = bpf_get_current_cgroup_id();
diff --git a/tools/testing/selftests/bpf/get_cgroup_id_user.c b/tools/testing/selftests/bpf/get_cgroup_id_user.c
index ea19a42e5894..e8da7b39158d 100644
--- a/tools/testing/selftests/bpf/get_cgroup_id_user.c
+++ b/tools/testing/selftests/bpf/get_cgroup_id_user.c
@@ -50,13 +50,13 @@ int main(int argc, char **argv)
50 const char *probe_name = "syscalls/sys_enter_nanosleep"; 50 const char *probe_name = "syscalls/sys_enter_nanosleep";
51 const char *file = "get_cgroup_id_kern.o"; 51 const char *file = "get_cgroup_id_kern.o";
52 int err, bytes, efd, prog_fd, pmu_fd; 52 int err, bytes, efd, prog_fd, pmu_fd;
53 int cgroup_fd, cgidmap_fd, pidmap_fd;
53 struct perf_event_attr attr = {}; 54 struct perf_event_attr attr = {};
54 int cgroup_fd, cgidmap_fd;
55 struct bpf_object *obj; 55 struct bpf_object *obj;
56 __u64 kcgid = 0, ucgid; 56 __u64 kcgid = 0, ucgid;
57 __u32 key = 0, pid;
57 int exit_code = 1; 58 int exit_code = 1;
58 char buf[256]; 59 char buf[256];
59 __u32 key = 0;
60 60
61 err = setup_cgroup_environment(); 61 err = setup_cgroup_environment();
62 if (CHECK(err, "setup_cgroup_environment", "err %d errno %d\n", err, 62 if (CHECK(err, "setup_cgroup_environment", "err %d errno %d\n", err,
@@ -81,6 +81,14 @@ int main(int argc, char **argv)
81 cgidmap_fd, errno)) 81 cgidmap_fd, errno))
82 goto close_prog; 82 goto close_prog;
83 83
84 pidmap_fd = bpf_find_map(__func__, obj, "pidmap");
85 if (CHECK(pidmap_fd < 0, "bpf_find_map", "err %d errno %d\n",
86 pidmap_fd, errno))
87 goto close_prog;
88
89 pid = getpid();
90 bpf_map_update_elem(pidmap_fd, &key, &pid, 0);
91
84 snprintf(buf, sizeof(buf), 92 snprintf(buf, sizeof(buf),
85 "/sys/kernel/debug/tracing/events/%s/id", probe_name); 93 "/sys/kernel/debug/tracing/events/%s/id", probe_name);
86 efd = open(buf, O_RDONLY, 0); 94 efd = open(buf, O_RDONLY, 0);