On Thu, May 4, 2023 at 11:08 PM Feng zhou zhoufeng.zf@bytedance.com wrote:
<...>
kernel/bpf/helpers.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index bb6b4637ebf2..453cbd312366 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -2149,6 +2149,25 @@ __bpf_kfunc struct cgroup *bpf_cgroup_from_id(u64 cgid) return NULL; return cgrp; }
+/**
- bpf_task_under_cgroup - wrap task_under_cgroup_hierarchy() as a kfunc, test
- task's membership of cgroup ancestry.
- @task: the task to be tested
- @ancestor: possible ancestor of @task's cgroup
- Tests whether @task's default cgroup hierarchy is a descendant of @ancestor.
- It follows all the same rules as cgroup_is_descendant, and only applies
- to the default hierarchy.
- */
+__bpf_kfunc long bpf_task_under_cgroup(struct task_struct *task,
struct cgroup *ancestor)
+{
if (unlikely(!ancestor || !task))
return -EINVAL;
return task_under_cgroup_hierarchy(task, ancestor);
+} #endif /* CONFIG_CGROUPS */
I wonder in what situation a null 'task' or 'ancestor' can be passed. Please call out in the comment that the returned value can be a negative error, so that writing if(bpf_task_under_cgroup()) may cause surprising results.
Hao