]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bpf: mark mm->owner as __safe_rcu_or_null
authorYafang Shao <laoar.shao@gmail.com>
Thu, 16 Oct 2025 06:39:28 +0000 (14:39 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Sun, 19 Oct 2025 02:23:08 +0000 (19:23 -0700)
When CONFIG_MEMCG is enabled, we can access mm->owner under RCU. The
owner can be NULL. With this change, BPF helpers can safely access
mm->owner to retrieve the associated task from the mm. We can then make
policy decision based on the task attribute.

The typical use case is as follows,

  bpf_rcu_read_lock(); // rcu lock must be held for rcu trusted field
  @owner = @mm->owner; // mm_struct::owner is rcu trusted or null
  if (!@owner)
      goto out;

  /* Do something based on the task attribute */

out:
  bpf_rcu_read_unlock();

Suggested-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
Acked-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Link: https://lore.kernel.org/r/20251016063929.13830-2-laoar.shao@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c

index c908015b2d34b12d900fe405bca31aa4295c2bc7..d0adf5600c4d55efecda96e9e748a7445dc977ea 100644 (file)
@@ -7054,6 +7054,9 @@ BTF_TYPE_SAFE_RCU(struct cgroup_subsys_state) {
 /* RCU trusted: these fields are trusted in RCU CS and can be NULL */
 BTF_TYPE_SAFE_RCU_OR_NULL(struct mm_struct) {
        struct file __rcu *exe_file;
+#ifdef CONFIG_MEMCG
+       struct task_struct __rcu *owner;
+#endif
 };
 
 /* skb->sk, req->sk are not RCU protected, but we mark them as such