Merge branch 'Enable RCU semantics for task kptrs'
David Vernet says: ==================== In commit 22df776a ("tasks: Extract rcu_users out of union"), the 'refcount_t rcu_users' field was extracted out of a union with the 'struct rcu_head rcu' field. This allows us to use the field for refcounting struct task_struct with RCU protection, as the RCU callback no longer flips rcu_users to be nonzero after the callback is scheduled. This patch set leverages this to do a few things: 1. Marks struct task_struct as RCU safe in the verifier, allowing referenced kptr tasks stored in maps to be accessed in an RCU read region without acquiring a reference (with just a NULL check). 2. Makes bpf_task_acquire() a KF_ACQUIRE | KF_RCU | KF_RET_NULL kfunc. 3. Removes bpf_task_kptr_get() and bpf_task_acquire_not_zero(), as they're now redundant with the above two changes. 4. Updates selftests and documentation accordingly. --- Changelog: v1: https://lore.kernel.org/all/20230331005733.406202-1-void@manifault.com/ v1 -> v2: - Remove testcases validating nested trust inheritance. The first version used 'struct task_struct __rcu *parent', but because that field has the __rcu tag it functions differently on gcc and llvm and causes gcc selftests to fail. Alexei is reworking nested trust, anyways so let's leave it off for now (Alexei). ==================== Signed-off-by:Alexei Starovoitov <ast@kernel.org>
Showing
- Documentation/bpf/kfuncs.rst 43 additions, 6 deletionsDocumentation/bpf/kfuncs.rst
- kernel/bpf/helpers.c 6 additions, 72 deletionskernel/bpf/helpers.c
- kernel/bpf/verifier.c 1 addition, 0 deletionskernel/bpf/verifier.c
- tools/testing/selftests/bpf/prog_tests/task_kfunc.c 2 additions, 1 deletiontools/testing/selftests/bpf/prog_tests/task_kfunc.c
- tools/testing/selftests/bpf/progs/rcu_read_lock.c 2 additions, 7 deletionstools/testing/selftests/bpf/progs/rcu_read_lock.c
- tools/testing/selftests/bpf/progs/task_kfunc_common.h 5 additions, 1 deletiontools/testing/selftests/bpf/progs/task_kfunc_common.h
- tools/testing/selftests/bpf/progs/task_kfunc_failure.c 61 additions, 74 deletionstools/testing/selftests/bpf/progs/task_kfunc_failure.c
- tools/testing/selftests/bpf/progs/task_kfunc_success.c 35 additions, 13 deletionstools/testing/selftests/bpf/progs/task_kfunc_success.c
Loading
Please register or sign in to comment