brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 6b1588d Raw
106 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (C) 2023 Chuyi Zhou <zhouchuyi@bytedance.com> */3 4#include "vmlinux.h"5#include <bpf/bpf_helpers.h>6#include <bpf/bpf_tracing.h>7#include "bpf_misc.h"8#include "bpf_experimental.h"9 10char _license[] SEC("license") = "GPL";11 12struct cgroup *bpf_cgroup_from_id(u64 cgid) __ksym;13void bpf_cgroup_release(struct cgroup *p) __ksym;14void bpf_rcu_read_lock(void) __ksym;15void bpf_rcu_read_unlock(void) __ksym;16 17SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")18__failure __msg("expected an RCU CS when using bpf_iter_task_next")19int BPF_PROG(iter_tasks_without_lock)20{21	struct task_struct *pos;22 23	bpf_for_each(task, pos, NULL, BPF_TASK_ITER_ALL_PROCS) {24 25	}26	return 0;27}28 29SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")30__failure __msg("expected an RCU CS when using bpf_iter_css_next")31int BPF_PROG(iter_css_without_lock)32{33	u64 cg_id = bpf_get_current_cgroup_id();34	struct cgroup *cgrp = bpf_cgroup_from_id(cg_id);35	struct cgroup_subsys_state *root_css, *pos;36 37	if (!cgrp)38		return 0;39	root_css = &cgrp->self;40 41	bpf_for_each(css, pos, root_css, BPF_CGROUP_ITER_DESCENDANTS_POST) {42 43	}44	bpf_cgroup_release(cgrp);45	return 0;46}47 48SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")49__failure __msg("expected an RCU CS when using bpf_iter_task_next")50int BPF_PROG(iter_tasks_lock_and_unlock)51{52	struct task_struct *pos;53 54	bpf_rcu_read_lock();55	bpf_for_each(task, pos, NULL, BPF_TASK_ITER_ALL_PROCS) {56		bpf_rcu_read_unlock();57 58		bpf_rcu_read_lock();59	}60	bpf_rcu_read_unlock();61	return 0;62}63 64SEC("?fentry.s/" SYS_PREFIX "sys_getpgid")65__failure __msg("expected an RCU CS when using bpf_iter_css_next")66int BPF_PROG(iter_css_lock_and_unlock)67{68	u64 cg_id = bpf_get_current_cgroup_id();69	struct cgroup *cgrp = bpf_cgroup_from_id(cg_id);70	struct cgroup_subsys_state *root_css, *pos;71 72	if (!cgrp)73		return 0;74	root_css = &cgrp->self;75 76	bpf_rcu_read_lock();77	bpf_for_each(css, pos, root_css, BPF_CGROUP_ITER_DESCENDANTS_POST) {78		bpf_rcu_read_unlock();79 80		bpf_rcu_read_lock();81	}82	bpf_rcu_read_unlock();83	bpf_cgroup_release(cgrp);84	return 0;85}86 87SEC("?fentry/" SYS_PREFIX "sys_getpgid")88__failure __msg("css_task_iter is only allowed in bpf_lsm, bpf_iter and sleepable progs")89int BPF_PROG(iter_css_task_for_each)90{91	u64 cg_id = bpf_get_current_cgroup_id();92	struct cgroup *cgrp = bpf_cgroup_from_id(cg_id);93	struct cgroup_subsys_state *css;94	struct task_struct *task;95 96	if (cgrp == NULL)97		return 0;98	css = &cgrp->self;99 100	bpf_for_each(css_task, task, css, CSS_TASK_ITER_PROCS) {101 102	}103	bpf_cgroup_release(cgrp);104	return 0;105}106