KFunc bpf_rcu_read_lock
Definition
This kfunc is used to define a RCU read lock region in the BPF program.
The end of such a region is marked by bpf_rcu_read_unlock
The current implementation does not support nested RCU read lock region in the program.
Signature
void bpf_rcu_read_lock()
Usage
struct task_struct {
...
struct task_struct *last_wakee;
struct task_struct __rcu *real_parent;
...
};
Let us say the program executes task = bpf_get_current_task_btf() to get a
task pointer. The basic rules are:
- '
real_parent = task->real_parentshould be insidebpf_rcu_read_lockregion. This is to simulatercu_dereference()operation. Thereal_parentis marked asMEM_RCUonly if (1).task->real_parentis insidebpf_rcu_read_lockregion, and (2). task is atrusted_ptr. SoMEM_RCUmarked pointer can be "trusted" inside thebpf_rcu_read_lockregion. last_wakee = real_parent->last_wakeeshould be insidebpf_rcu_read_lockregion since it tries to access rcu protected memory.- the
last_wakeepointer will be marked asPTR_UNTRUSTEDsince in general it is not clear whether the object pointed bylast_wakeeis valid or not even insidebpf_rcu_read_lockregion.
Program types
The following program types can make use of this kfunc:
BPF_PROG_TYPE_CGROUP_DEVICEv6.12 -BPF_PROG_TYPE_CGROUP_SKBBPF_PROG_TYPE_CGROUP_SOCKv6.12 -BPF_PROG_TYPE_CGROUP_SOCKOPTv6.12 -BPF_PROG_TYPE_CGROUP_SOCK_ADDRv6.7 -BPF_PROG_TYPE_CGROUP_SYSCTLv6.12 -BPF_PROG_TYPE_LSMBPF_PROG_TYPE_LWT_INBPF_PROG_TYPE_LWT_OUTBPF_PROG_TYPE_LWT_SEG6LOCALBPF_PROG_TYPE_LWT_XMITBPF_PROG_TYPE_NETFILTERBPF_PROG_TYPE_PERF_EVENTv6.12 -BPF_PROG_TYPE_SCHED_ACTBPF_PROG_TYPE_SCHED_CLSBPF_PROG_TYPE_SK_SKBBPF_PROG_TYPE_SOCKET_FILTERBPF_PROG_TYPE_SOCK_OPSv6.15 -BPF_PROG_TYPE_STRUCT_OPSBPF_PROG_TYPE_SYSCALLBPF_PROG_TYPE_TRACEPOINTv6.12 -BPF_PROG_TYPE_TRACINGBPF_PROG_TYPE_XDP
Example
Docs could be improved
This part of the docs is incomplete, contributions are very welcome