Thread (12 messages) flat view 12 messages, 4 authors, 2021-01-16

Re: [PATCH bpf-next 1/4] bpf: enable task local storage for tracing programs

From: KP Singh <kpsingh@kernel.org>
Date: 2021-01-11 21:36:56
Also in: bpf, lkml

On Mon, Jan 11, 2021 at 7:57 PM Martin KaFai Lau [off-list ref] wrote:
On Fri, Jan 08, 2021 at 03:19:47PM -0800, Song Liu wrote:

[ ... ]
quoted
diff --git a/kernel/bpf/bpf_local_storage.c b/kernel/bpf/bpf_local_storage.c
index dd5aedee99e73..9bd47ad2b26f1 100644
--- a/kernel/bpf/bpf_local_storage.c
+++ b/kernel/bpf/bpf_local_storage.c
@@ -140,17 +140,18 @@ static void __bpf_selem_unlink_storage(struct bpf_local_storage_elem *selem)
 {
      struct bpf_local_storage *local_storage;
      bool free_local_storage = false;
+     unsigned long flags;

      if (unlikely(!selem_linked_to_storage(selem)))
              /* selem has already been unlinked from sk */
              return;

      local_storage = rcu_dereference(selem->local_storage);
-     raw_spin_lock_bh(&local_storage->lock);
+     raw_spin_lock_irqsave(&local_storage->lock, flags);
It will be useful to have a few words in commit message on this change
for future reference purpose.

Please also remove the in_irq() check from bpf_sk_storage.c
to avoid confusion in the future.  It probably should
be in a separate patch.

[ ... ]
quoted
diff --git a/kernel/bpf/bpf_task_storage.c b/kernel/bpf/bpf_task_storage.c
index 4ef1959a78f27..f654b56907b69 100644
diff --git a/kernel/fork.c b/kernel/fork.c
index 7425b3224891d..3d65c8ebfd594 100644
[ ... ]
quoted
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -96,6 +96,7 @@
 #include <linux/kasan.h>
 #include <linux/scs.h>
 #include <linux/io_uring.h>
+#include <linux/bpf.h>

 #include <asm/pgalloc.h>
 #include <linux/uaccess.h>
@@ -734,6 +735,7 @@ void __put_task_struct(struct task_struct *tsk)
      cgroup_free(tsk);
      task_numa_free(tsk, true);
      security_task_free(tsk);
+     bpf_task_storage_free(tsk);
      exit_creds(tsk);
If exit_creds() is traced by a bpf and this bpf is doing
bpf_task_storage_get(..., BPF_LOCAL_STORAGE_GET_F_CREATE),
new task storage will be created after bpf_task_storage_free().

I recalled there was an earlier discussion with KP and KP mentioned
BPF_LSM will not be called with a task that is going away.
It seems enabling bpf task storage in bpf tracing will break
this assumption and needs to be addressed?
For tracing programs, I think we will need an allow list where
task local storage can be used.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help