mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
selftests/bpf: Add selftests for bpf_cgroup_ancestor() kfunc
bpf_cgroup_ancestor() allows BPF programs to access the ancestor of a struct cgroup *. This patch adds selftests that validate its expected behavior. Signed-off-by: David Vernet <void@manifault.com> Link: https://lore.kernel.org/r/20221122055458.173143-5-void@manifault.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
5ca7867078
commit
227a89cf50
@ -86,6 +86,7 @@ static const char * const success_tests[] = {
|
||||
"test_cgrp_acquire_leave_in_map",
|
||||
"test_cgrp_xchg_release",
|
||||
"test_cgrp_get_release",
|
||||
"test_cgrp_get_ancestors",
|
||||
};
|
||||
|
||||
static struct {
|
||||
|
@ -23,6 +23,7 @@ struct hash_map {
|
||||
struct cgroup *bpf_cgroup_acquire(struct cgroup *p) __ksym;
|
||||
struct cgroup *bpf_cgroup_kptr_get(struct cgroup **pp) __ksym;
|
||||
void bpf_cgroup_release(struct cgroup *p) __ksym;
|
||||
struct cgroup *bpf_cgroup_ancestor(struct cgroup *cgrp, int level) __ksym;
|
||||
|
||||
static inline struct __cgrps_kfunc_map_value *cgrps_kfunc_map_value_lookup(struct cgroup *cgrp)
|
||||
{
|
||||
|
@ -123,3 +123,48 @@ int BPF_PROG(test_cgrp_get_release, struct cgroup *cgrp, const char *path)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SEC("tp_btf/cgroup_mkdir")
|
||||
int BPF_PROG(test_cgrp_get_ancestors, struct cgroup *cgrp, const char *path)
|
||||
{
|
||||
struct cgroup *self, *ancestor1, *invalid;
|
||||
|
||||
if (!is_test_kfunc_task())
|
||||
return 0;
|
||||
|
||||
self = bpf_cgroup_ancestor(cgrp, cgrp->level);
|
||||
if (!self) {
|
||||
err = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (self->self.id != cgrp->self.id) {
|
||||
bpf_cgroup_release(self);
|
||||
err = 2;
|
||||
return 0;
|
||||
}
|
||||
bpf_cgroup_release(self);
|
||||
|
||||
ancestor1 = bpf_cgroup_ancestor(cgrp, cgrp->level - 1);
|
||||
if (!ancestor1) {
|
||||
err = 3;
|
||||
return 0;
|
||||
}
|
||||
bpf_cgroup_release(ancestor1);
|
||||
|
||||
invalid = bpf_cgroup_ancestor(cgrp, 10000);
|
||||
if (invalid) {
|
||||
bpf_cgroup_release(invalid);
|
||||
err = 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
invalid = bpf_cgroup_ancestor(cgrp, -1);
|
||||
if (invalid) {
|
||||
bpf_cgroup_release(invalid);
|
||||
err = 5;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user