Lines Matching refs:cgrp

26 void cgroup_bpf_put(struct cgroup *cgrp)  in cgroup_bpf_put()  argument
30 for (type = 0; type < ARRAY_SIZE(cgrp->bpf.progs); type++) { in cgroup_bpf_put()
31 struct list_head *progs = &cgrp->bpf.progs[type]; in cgroup_bpf_put()
42 bpf_prog_array_free(cgrp->bpf.effective[type]); in cgroup_bpf_put()
66 static bool hierarchy_allows_attach(struct cgroup *cgrp, in hierarchy_allows_attach() argument
72 p = cgroup_parent(cgrp); in hierarchy_allows_attach()
96 static int compute_effective_progs(struct cgroup *cgrp, in compute_effective_progs() argument
102 struct cgroup *p = cgrp; in compute_effective_progs()
118 p = cgrp; in compute_effective_progs()
137 static void activate_effective_progs(struct cgroup *cgrp, in activate_effective_progs() argument
143 old_array = xchg(&cgrp->bpf.effective[type], array); in activate_effective_progs()
154 int cgroup_bpf_inherit(struct cgroup *cgrp) in cgroup_bpf_inherit() argument
159 #define NR ARRAY_SIZE(cgrp->bpf.effective) in cgroup_bpf_inherit()
164 INIT_LIST_HEAD(&cgrp->bpf.progs[i]); in cgroup_bpf_inherit()
167 if (compute_effective_progs(cgrp, i, &arrays[i])) in cgroup_bpf_inherit()
171 activate_effective_progs(cgrp, i, arrays[i]); in cgroup_bpf_inherit()
180 static int update_effective_progs(struct cgroup *cgrp, in update_effective_progs() argument
187 css_for_each_descendant_pre(css, &cgrp->self) { in update_effective_progs()
196 css_for_each_descendant_pre(css, &cgrp->self) { in update_effective_progs()
209 css_for_each_descendant_pre(css, &cgrp->self) { in update_effective_progs()
230 int __cgroup_bpf_attach(struct cgroup *cgrp, struct bpf_prog *prog, in __cgroup_bpf_attach() argument
233 struct list_head *progs = &cgrp->bpf.progs[type]; in __cgroup_bpf_attach()
244 if (!hierarchy_allows_attach(cgrp, type, flags)) in __cgroup_bpf_attach()
247 if (!list_empty(progs) && cgrp->bpf.flags[type] != flags) in __cgroup_bpf_attach()
300 cgrp->bpf.flags[type] = flags; in __cgroup_bpf_attach()
302 err = update_effective_progs(cgrp, type); in __cgroup_bpf_attach()
313 bpf_cgroup_storage_link(storage, cgrp, type); in __cgroup_bpf_attach()
321 bpf_cgroup_storage_link(old_storage, cgrp, type); in __cgroup_bpf_attach()
338 int __cgroup_bpf_detach(struct cgroup *cgrp, struct bpf_prog *prog, in __cgroup_bpf_detach() argument
341 struct list_head *progs = &cgrp->bpf.progs[type]; in __cgroup_bpf_detach()
342 u32 flags = cgrp->bpf.flags[type]; in __cgroup_bpf_detach()
382 err = update_effective_progs(cgrp, type); in __cgroup_bpf_detach()
393 cgrp->bpf.flags[type] = 0; in __cgroup_bpf_detach()
406 int __cgroup_bpf_query(struct cgroup *cgrp, const union bpf_attr *attr, in __cgroup_bpf_query() argument
411 struct list_head *progs = &cgrp->bpf.progs[type]; in __cgroup_bpf_query()
412 u32 flags = cgrp->bpf.flags[type]; in __cgroup_bpf_query()
416 cnt = bpf_prog_array_length(cgrp->bpf.effective[type]); in __cgroup_bpf_query()
433 return bpf_prog_array_copy_to_user(cgrp->bpf.effective[type], in __cgroup_bpf_query()
454 struct cgroup *cgrp; in cgroup_bpf_prog_attach() local
457 cgrp = cgroup_get_from_fd(attr->target_fd); in cgroup_bpf_prog_attach()
458 if (IS_ERR(cgrp)) in cgroup_bpf_prog_attach()
459 return PTR_ERR(cgrp); in cgroup_bpf_prog_attach()
461 ret = cgroup_bpf_attach(cgrp, prog, attr->attach_type, in cgroup_bpf_prog_attach()
463 cgroup_put(cgrp); in cgroup_bpf_prog_attach()
470 struct cgroup *cgrp; in cgroup_bpf_prog_detach() local
473 cgrp = cgroup_get_from_fd(attr->target_fd); in cgroup_bpf_prog_detach()
474 if (IS_ERR(cgrp)) in cgroup_bpf_prog_detach()
475 return PTR_ERR(cgrp); in cgroup_bpf_prog_detach()
481 ret = cgroup_bpf_detach(cgrp, prog, attr->attach_type, 0); in cgroup_bpf_prog_detach()
485 cgroup_put(cgrp); in cgroup_bpf_prog_detach()
492 struct cgroup *cgrp; in cgroup_bpf_prog_query() local
495 cgrp = cgroup_get_from_fd(attr->query.target_fd); in cgroup_bpf_prog_query()
496 if (IS_ERR(cgrp)) in cgroup_bpf_prog_query()
497 return PTR_ERR(cgrp); in cgroup_bpf_prog_query()
499 ret = cgroup_bpf_query(cgrp, attr, uattr); in cgroup_bpf_prog_query()
501 cgroup_put(cgrp); in cgroup_bpf_prog_query()
526 struct cgroup *cgrp; in __cgroup_bpf_run_filter_skb() local
535 cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data); in __cgroup_bpf_run_filter_skb()
539 ret = BPF_PROG_RUN_ARRAY(cgrp->bpf.effective[type], skb, in __cgroup_bpf_run_filter_skb()
563 struct cgroup *cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data); in __cgroup_bpf_run_filter_sk() local
566 ret = BPF_PROG_RUN_ARRAY(cgrp->bpf.effective[type], sk, BPF_PROG_RUN); in __cgroup_bpf_run_filter_sk()
595 struct cgroup *cgrp; in __cgroup_bpf_run_filter_sock_addr() local
609 cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data); in __cgroup_bpf_run_filter_sock_addr()
610 ret = BPF_PROG_RUN_ARRAY(cgrp->bpf.effective[type], &ctx, BPF_PROG_RUN); in __cgroup_bpf_run_filter_sock_addr()
636 struct cgroup *cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data); in __cgroup_bpf_run_filter_sock_ops() local
639 ret = BPF_PROG_RUN_ARRAY(cgrp->bpf.effective[type], sock_ops, in __cgroup_bpf_run_filter_sock_ops()
648 struct cgroup *cgrp; in __cgroup_bpf_check_dev_permission() local
657 cgrp = task_dfl_cgroup(current); in __cgroup_bpf_check_dev_permission()
658 allow = BPF_PROG_RUN_ARRAY(cgrp->bpf.effective[type], &ctx, in __cgroup_bpf_check_dev_permission()