* [PATCH] uprobes: fix incorrect lockdep condition in filter_chain()
@ 2026-01-28 9:58 Breno Leitao
2026-01-28 13:50 ` Oleg Nesterov
0 siblings, 1 reply; 4+ messages in thread
From: Breno Leitao @ 2026-01-28 9:58 UTC (permalink / raw)
To: Masami Hiramatsu, Oleg Nesterov, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
James Clark, Andrii Nakryiko
Cc: linux-kernel, linux-trace-kernel, linux-perf-users, kernel-team,
stable, Breno Leitao
The list_for_each_entry_rcu() in filter_chain() uses
rcu_read_lock_trace_held() as the lockdep condition, but the function
holds consumer_rwsem, not the RCU trace lock.
This gives me the following output when running with some locking debug
option enabled:
kernel/events/uprobes.c:1141 RCU-list traversed in non-reader section!!
filter_chain
register_for_each_vma
uprobe_unregister_nosync
__probe_event_disable
Remove the incorrect lockdep condition since the rwsem provides
sufficient protection for the list traversal.
Cc: stable@vger.kernel.org
Fixes: 87195a1ee332a ("uprobes: switch to RCU Tasks Trace flavor for better performance")
Signed-off-by: Breno Leitao <leitao@debian.org>
---
kernel/events/uprobes.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
index d546d32390a81..726d13b375f3d 100644
--- a/kernel/events/uprobes.c
+++ b/kernel/events/uprobes.c
@@ -1138,7 +1138,7 @@ static bool filter_chain(struct uprobe *uprobe, struct mm_struct *mm)
bool ret = false;
down_read(&uprobe->consumer_rwsem);
- list_for_each_entry_rcu(uc, &uprobe->consumers, cons_node, rcu_read_lock_trace_held()) {
+ list_for_each_entry(uc, &uprobe->consumers, cons_node) {
ret = consumer_filter(uc, mm);
if (ret)
break;
---
base-commit: 1f97d9dcf53649c41c33227b345a36902cbb08ad
change-id: 20260128-uprobe_rcu-e21867ab4c1b
Best regards,
--
Breno Leitao <leitao@debian.org>
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] uprobes: fix incorrect lockdep condition in filter_chain()
2026-01-28 9:58 [PATCH] uprobes: fix incorrect lockdep condition in filter_chain() Breno Leitao
@ 2026-01-28 13:50 ` Oleg Nesterov
2026-01-28 17:23 ` Andrii Nakryiko
0 siblings, 1 reply; 4+ messages in thread
From: Oleg Nesterov @ 2026-01-28 13:50 UTC (permalink / raw)
To: Breno Leitao
Cc: Masami Hiramatsu, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
James Clark, Andrii Nakryiko, linux-kernel, linux-trace-kernel,
linux-perf-users, kernel-team, stable
On 01/28, Breno Leitao wrote:
>
> The list_for_each_entry_rcu() in filter_chain() uses
> rcu_read_lock_trace_held() as the lockdep condition, but the function
> holds consumer_rwsem, not the RCU trace lock.
>
> This gives me the following output when running with some locking debug
> option enabled:
>
> kernel/events/uprobes.c:1141 RCU-list traversed in non-reader section!!
> filter_chain
> register_for_each_vma
> uprobe_unregister_nosync
> __probe_event_disable
>
> Remove the incorrect lockdep condition since the rwsem provides
> sufficient protection for the list traversal.
I hope Andrii will recheck, but looks obviously correct to me.
> Fixes: 87195a1ee332a ("uprobes: switch to RCU Tasks Trace flavor for better performance")
This commit just change the __list_check_rcu() condition...
Perhaps
Fixes: cc01bd044e6a ("uprobes: travers uprobe's consumer list locklessly under SRCU protection")
makes more sense?
Acked-by: Oleg Nesterov <oleg@redhat.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] uprobes: fix incorrect lockdep condition in filter_chain()
2026-01-28 13:50 ` Oleg Nesterov
@ 2026-01-28 17:23 ` Andrii Nakryiko
2026-01-28 17:51 ` Breno Leitao
0 siblings, 1 reply; 4+ messages in thread
From: Andrii Nakryiko @ 2026-01-28 17:23 UTC (permalink / raw)
To: Oleg Nesterov
Cc: Breno Leitao, Masami Hiramatsu, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
James Clark, Andrii Nakryiko, linux-kernel, linux-trace-kernel,
linux-perf-users, kernel-team, stable
On Wed, Jan 28, 2026 at 5:51 AM Oleg Nesterov <oleg@redhat.com> wrote:
>
> On 01/28, Breno Leitao wrote:
> >
> > The list_for_each_entry_rcu() in filter_chain() uses
> > rcu_read_lock_trace_held() as the lockdep condition, but the function
> > holds consumer_rwsem, not the RCU trace lock.
> >
> > This gives me the following output when running with some locking debug
> > option enabled:
> >
> > kernel/events/uprobes.c:1141 RCU-list traversed in non-reader section!!
> > filter_chain
> > register_for_each_vma
> > uprobe_unregister_nosync
> > __probe_event_disable
> >
> > Remove the incorrect lockdep condition since the rwsem provides
> > sufficient protection for the list traversal.
>
> I hope Andrii will recheck, but looks obviously correct to me.
yeah, I did, and it also looks obviously correct to me, I didn't need
to use rcu flavor there in the first place, I think.
Acked-by: Andrii Nakryiko <andrii@kernel.org>
>
> > Fixes: 87195a1ee332a ("uprobes: switch to RCU Tasks Trace flavor for better performance")
>
> This commit just change the __list_check_rcu() condition...
>
> Perhaps
> Fixes: cc01bd044e6a ("uprobes: travers uprobe's consumer list locklessly under SRCU protection")
>
yep, this one is the earliest change adding unnecessary rcu flavor of
list_for_each_entry
> makes more sense?
>
> Acked-by: Oleg Nesterov <oleg@redhat.com>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] uprobes: fix incorrect lockdep condition in filter_chain()
2026-01-28 17:23 ` Andrii Nakryiko
@ 2026-01-28 17:51 ` Breno Leitao
0 siblings, 0 replies; 4+ messages in thread
From: Breno Leitao @ 2026-01-28 17:51 UTC (permalink / raw)
To: Andrii Nakryiko
Cc: Oleg Nesterov, Masami Hiramatsu, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
James Clark, Andrii Nakryiko, linux-kernel, linux-trace-kernel,
linux-perf-users, kernel-team, stable
On Wed, Jan 28, 2026 at 09:23:45AM -0800, Andrii Nakryiko wrote:
> On Wed, Jan 28, 2026 at 5:51 AM Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > On 01/28, Breno Leitao wrote:
> > >
> > > The list_for_each_entry_rcu() in filter_chain() uses
> > > rcu_read_lock_trace_held() as the lockdep condition, but the function
> > > holds consumer_rwsem, not the RCU trace lock.
> > >
> > > This gives me the following output when running with some locking debug
> > > option enabled:
> > >
> > > kernel/events/uprobes.c:1141 RCU-list traversed in non-reader section!!
> > > filter_chain
> > > register_for_each_vma
> > > uprobe_unregister_nosync
> > > __probe_event_disable
> > >
> > > Remove the incorrect lockdep condition since the rwsem provides
> > > sufficient protection for the list traversal.
> >
> > I hope Andrii will recheck, but looks obviously correct to me.
>
> yeah, I did, and it also looks obviously correct to me, I didn't need
> to use rcu flavor there in the first place, I think.
>
> Acked-by: Andrii Nakryiko <andrii@kernel.org>
>
> >
> > > Fixes: 87195a1ee332a ("uprobes: switch to RCU Tasks Trace flavor for better performance")
> >
> > This commit just change the __list_check_rcu() condition...
> >
> > Perhaps
> > Fixes: cc01bd044e6a ("uprobes: travers uprobe's consumer list locklessly under SRCU protection")
> >
>
> yep, this one is the earliest change adding unnecessary rcu flavor of
> list_for_each_entry
Ack. I will respin with the correct "fixes" tag.
--breno
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-01-28 17:51 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-28 9:58 [PATCH] uprobes: fix incorrect lockdep condition in filter_chain() Breno Leitao
2026-01-28 13:50 ` Oleg Nesterov
2026-01-28 17:23 ` Andrii Nakryiko
2026-01-28 17:51 ` Breno Leitao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox