Skip to content

Commit 9dda18a

Browse files
leitaomhiramat
authored andcommitted
tracing: fprobe: Fix RCU warning message in list traversal
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. Link: https://lore.kernel.org/all/[email protected]/ Fixes: a3dc298 ("tracing: fprobe: Cleanup fprobe hash when module unloading") Signed-off-by: Breno Leitao <[email protected]> Tested-by: Antonio Quartulli <[email protected]> Tested-by: Matthieu Baerts (NGI0) <[email protected]> Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
1 parent 0e1329d commit 9dda18a

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

kernel/trace/fprobe.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,8 @@ static void fprobe_remove_node_in_module(struct module *mod, struct hlist_head *
454454
struct fprobe_hlist_node *node;
455455
int ret = 0;
456456

457-
hlist_for_each_entry_rcu(node, head, hlist) {
457+
hlist_for_each_entry_rcu(node, head, hlist,
458+
lockdep_is_held(&fprobe_mutex)) {
458459
if (!within_module(node->addr, mod))
459460
continue;
460461
if (delete_fprobe_node(node))

0 commit comments

Comments
 (0)