]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
bpf: Enforce RCU protection for KF_RCU_PROTECTED
authorKumar Kartikeya Dwivedi <memxor@gmail.com>
Wed, 17 Sep 2025 03:27:54 +0000 (03:27 +0000)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 18 Sep 2025 22:36:17 +0000 (15:36 -0700)
commit1512231b6cc860ffbfbd85b295449dfb6977d357
treec95d27bc36f3ce9fdf123869ff21ba337d371738
parent6ff4a0fa3e1b2b9756254b477fb2f0fbe04ff378
bpf: Enforce RCU protection for KF_RCU_PROTECTED

Currently, KF_RCU_PROTECTED only applies to iterator APIs and that too
in a convoluted fashion: the presence of this flag on the kfunc is used
to set MEM_RCU in iterator type, and the lack of RCU protection results
in an error only later, once next() or destroy() methods are invoked on
the iterator. While there is no bug, this is certainly a bit
unintuitive, and makes the enforcement of the flag iterator specific.

In the interest of making this flag useful for other upcoming kfuncs,
e.g. scx_bpf_cpu_curr() [0][1], add enforcement for invoking the kfunc
in an RCU critical section in general.

This would also mean that iterator APIs using KF_RCU_PROTECTED will
error out earlier, instead of throwing an error for lack of RCU CS
protection when next() or destroy() methods are invoked.

In addition to this, if the kfuncs tagged KF_RCU_PROTECTED return a
pointer value, ensure that this pointer value is only usable in an RCU
critical section. There might be edge cases where the return value is
special and doesn't need to imply MEM_RCU semantics, but in general, the
assumption should hold for the majority of kfuncs, and we can revisit
things if necessary later.

  [0]: https://lore.kernel.org/all/20250903212311.369697-3-christian.loehle@arm.com
  [1]: https://lore.kernel.org/all/20250909195709.92669-1-arighi@nvidia.com

Tested-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20250917032755.4068726-2-memxor@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Documentation/bpf/kfuncs.rst
kernel/bpf/verifier.c
tools/testing/selftests/bpf/progs/cgroup_read_xattr.c
tools/testing/selftests/bpf/progs/iters_task_failure.c