]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: Move rcu lock management out of BPF_PROG_RUN routines
authorStanislav Fomichev <sdf@google.com>
Thu, 14 Apr 2022 16:12:33 +0000 (09:12 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 19 Apr 2022 16:45:47 +0000 (09:45 -0700)
commitced293070e2600542d1312ab339c3921868b6617
tree7b694e74401831a39e0c5e3b6bd0c8416a77cc7f
parentb8641d27f604ce043c95d1cef8e953642acd09f1
bpf: Move rcu lock management out of BPF_PROG_RUN routines

Commit fbea465fb5b5 ("bpf: Refactor BPF_PROG_RUN_ARRAY family of macros
into functions") switched a bunch of BPF_PROG_RUN macros to inline
routines. This changed the semantic a bit. Due to arguments expansion
of macros, it used to be:

rcu_read_lock();
array = rcu_dereference(cgrp->bpf.effective[atype]);
...

Now, with with inline routines, we have:
array_rcu = rcu_dereference(cgrp->bpf.effective[atype]);
/* array_rcu can be kfree'd here */
rcu_read_lock();
array = rcu_dereference(array_rcu);

I'm assuming in practice rcu subsystem isn't fast enough to trigger
this but let's use rcu API properly.

Also, rename to lower caps to not confuse with macros. Additionally,
drop and expand BPF_PROG_CGROUP_INET_EGRESS_RUN_ARRAY.

See [1] for more context.

  [1] https://lore.kernel.org/bpf/CAKH8qBs60fOinFdxiiQikK_q0EcVxGvNTQoWvHLEUGbgcj1UYg@mail.gmail.com/T/#u

v2
- keep rcu locks inside by passing cgroup_bpf

Fixes: fbea465fb5b5 ("bpf: Refactor BPF_PROG_RUN_ARRAY family of macros into functions")
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20220414161233.170780-1-sdf@google.com
drivers/media/rc/bpf-lirc.c
include/linux/bpf.h
kernel/bpf/cgroup.c
kernel/trace/bpf_trace.c