Signed-off-by: Kumar Kartikeya Dwivedi --- .../selftests/bpf/prog_tests/cgrp_kfunc.c | 48 +++++++++++++++++++ .../selftests/bpf/progs/cgrp_kfunc_success.c | 12 +++++ 2 files changed, 60 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/cgrp_kfunc.c b/tools/testing/selftests/bpf/prog_tests/cgrp_kfunc.c index adda85f97058..cb3a220488c2 100644 --- a/tools/testing/selftests/bpf/prog_tests/cgrp_kfunc.c +++ b/tools/testing/selftests/bpf/prog_tests/cgrp_kfunc.c @@ -4,6 +4,7 @@ #define _GNU_SOURCE #include #include +#include #include "cgrp_kfunc_failure.skel.h" #include "cgrp_kfunc_success.skel.h" @@ -87,6 +88,50 @@ static const char * const success_tests[] = { "test_cgrp_from_id", }; +static void test_cgrp_from_id_ns(void) +{ + LIBBPF_OPTS(bpf_test_run_opts, opts); + struct cgrp_kfunc_success *skel; + struct bpf_program *prog; + int fd, ret; + + skel = open_load_cgrp_kfunc_skel(); + if (!ASSERT_OK_PTR(skel, "open_load_skel")) + return; + + if (!ASSERT_OK(skel->bss->err, "pre_mkdir_err")) + goto cleanup; + + prog = bpf_object__find_program_by_name(skel->obj, "test_cgrp_from_id_ns"); + if (!ASSERT_OK_PTR(prog, "bpf_object__find_program_by_name")) + goto cleanup; + + fd = create_and_get_cgroup("cgrp_from_id_ns"); + if (!ASSERT_GE(fd, 0, "cgrp_fd")) + goto cleanup; + + if (!ASSERT_OK(join_cgroup("cgrp_from_id_ns"), "join cgrp")) + goto fd_cleanup; + + if (!ASSERT_OK(unshare(CLONE_NEWCGROUP), "unshare cgns")) + goto fd_cleanup; + + ret = bpf_prog_test_run_opts(bpf_program__fd(prog), &opts); + if (!ASSERT_OK(ret, "test run ret")) + goto fd_cleanup; + + if (!ASSERT_OK(opts.retval, "test run retval")) + goto fd_cleanup; + + remove_cgroup("cgrp_from_id_ns"); + +fd_cleanup: + close(fd); +cleanup: + cgrp_kfunc_success__destroy(skel); + +} + void test_cgrp_kfunc(void) { int i, err; @@ -102,6 +147,9 @@ void test_cgrp_kfunc(void) run_success_test(success_tests[i]); } + if (test__start_subtest("test_cgrp_from_id_ns")) + test_cgrp_from_id_ns(); + RUN_TESTS(cgrp_kfunc_failure); cleanup: diff --git a/tools/testing/selftests/bpf/progs/cgrp_kfunc_success.c b/tools/testing/selftests/bpf/progs/cgrp_kfunc_success.c index 5354455a01be..02d8f160ca0e 100644 --- a/tools/testing/selftests/bpf/progs/cgrp_kfunc_success.c +++ b/tools/testing/selftests/bpf/progs/cgrp_kfunc_success.c @@ -221,3 +221,15 @@ int BPF_PROG(test_cgrp_from_id, struct cgroup *cgrp, const char *path) return 0; } + +SEC("syscall") +int test_cgrp_from_id_ns(void *ctx) +{ + struct cgroup *cg; + + cg = bpf_cgroup_from_id(1); + if (!cg) + return 42; + bpf_cgroup_release(cg); + return 0; +} -- 2.47.3