Re: [PATCH v2] tracing/uprobe: Add missing PID filter for uretprobe
From: Oleg Nesterov <oleg@redhat.com>
Date: 2024-08-27 14:26:26
Also in:
bpf
From: Oleg Nesterov <oleg@redhat.com>
Date: 2024-08-27 14:26:26
Also in:
bpf
On 08/27, Jiri Olsa wrote:
On Tue, Aug 27, 2024 at 12:40:52PM +0200, Oleg Nesterov wrote:quoted
static bool uprobe_multi_link_filter(struct uprobe_consumer *con, struct mm_struct *mm) { struct bpf_uprobe *uprobe; + struct task_struct *task, *t; + bool ret = false; uprobe = container_of(con, struct bpf_uprobe, consumer); - return uprobe->link->task->mm == mm; + task = uprobe->link->task; + + rcu_read_lock(); + for_each_thread(task, t) { + struct mm_struct *mm = READ_ONCE(t->mm); + if (mm) { + ret = t->mm == mm; + break; + } + } + rcu_read_unlock();that seems expensive if there's many threads
many threads with ->mm == NULL? In the likely case for_each_thread() stops after the first t->mm check.
could we check the leader first and only if it's gone fallback to this?
up to you.. Oleg.