Message ID | 20250410-fprobe-v1-1-068ef5f41436@debian.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | tracing: fprobe: Fix RCU warning message in list traversal | expand |
On 10/04/2025 14:22, Breno Leitao wrote: > When CONFIG_PROVE_RCU_LIST is enabled, fprobe triggers the following > warning: > > WARNING: suspicious RCU usage > kernel/trace/fprobe.c:457 RCU-list traversed in non-reader section!! > > other info that might help us debug this: > #1: ffffffff863c4e08 (fprobe_mutex){+.+.}-{4:4}, at: fprobe_module_callback+0x7b/0x8c0 > > Call Trace: > fprobe_module_callback > notifier_call_chain > blocking_notifier_call_chain > > This warning occurs because fprobe_remove_node_in_module() traverses an > RCU list using RCU primitives without holding an RCU read lock. However, > the function is only called from fprobe_module_callback(), which holds > the fprobe_mutex lock that provides sufficient protection for safely > traversing the list. > > Fix the warning by specifying the locking design to the > CONFIG_PROVE_RCU_LIST mechanism. Add the lockdep_is_held() argument to > hlist_for_each_entry_rcu() to inform the RCU checker that fprobe_mutex > provides the required protection. > > Fixes: a3dc2983ca7b90 ("tracing: fprobe: Cleanup fprobe hash when module unloading") > Signed-off-by: Breno Leitao <leitao@debian.org> I just hit this issue and I verified that the patch actually solves it without causing side effects. FWIW Tested-by: Antonio Quartulli <antonio@mandelbit.com>
diff --git a/kernel/trace/fprobe.c b/kernel/trace/fprobe.c index 95c6e3473a76b..ba7ff14f5339b 100644 --- a/kernel/trace/fprobe.c +++ b/kernel/trace/fprobe.c @@ -454,7 +454,8 @@ static void fprobe_remove_node_in_module(struct module *mod, struct hlist_head * struct fprobe_hlist_node *node; int ret = 0; - hlist_for_each_entry_rcu(node, head, hlist) { + hlist_for_each_entry_rcu(node, head, hlist, + lockdep_is_held(&fprobe_mutex)) { if (!within_module(node->addr, mod)) continue; if (delete_fprobe_node(node))
When CONFIG_PROVE_RCU_LIST is enabled, fprobe triggers the following warning: WARNING: suspicious RCU usage kernel/trace/fprobe.c:457 RCU-list traversed in non-reader section!! other info that might help us debug this: #1: ffffffff863c4e08 (fprobe_mutex){+.+.}-{4:4}, at: fprobe_module_callback+0x7b/0x8c0 Call Trace: fprobe_module_callback notifier_call_chain blocking_notifier_call_chain This warning occurs because fprobe_remove_node_in_module() traverses an RCU list using RCU primitives without holding an RCU read lock. However, the function is only called from fprobe_module_callback(), which holds the fprobe_mutex lock that provides sufficient protection for safely traversing the list. Fix the warning by specifying the locking design to the CONFIG_PROVE_RCU_LIST mechanism. Add the lockdep_is_held() argument to hlist_for_each_entry_rcu() to inform the RCU checker that fprobe_mutex provides the required protection. Fixes: a3dc2983ca7b90 ("tracing: fprobe: Cleanup fprobe hash when module unloading") Signed-off-by: Breno Leitao <leitao@debian.org> --- kernel/trace/fprobe.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- base-commit: 3b07108ada81a8ebcebf1fe61367b4e436c895bd change-id: 20250410-fprobe-dfe91798f03c Best regards,