From: Alexei Starovoitov Date: Sat, 1 Apr 2023 16:07:21 +0000 (-0700) Subject: Merge branch 'Enable RCU semantics for task kptrs' X-Git-Tag: v6.6.7~2736^2~129^2~42 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a033907e7b34505ab281b6207750f55c98c69156;p=platform%2Fkernel%2Flinux-starfive.git Merge branch 'Enable RCU semantics for task kptrs' David Vernet says: ==================== In commit 22df776a9a86 ("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 --- a033907e7b34505ab281b6207750f55c98c69156