ftrace: safe traversal of ftrace_hash hlist
PATCH 1/1 ftrace: safe traversal of ftrace_hash hlist
Hi Steven,
I noticed that concurrent instances of ftrace_record_ip() have a race between ftrace_hash list traversal during ftrace_ip_in_hash() (before acquiring ftrace_shutdown_lock) and ftrace_add_hash().If it's so then this should fix it.
Signed-off-by Abhishek Sagar <[email protected]>
---
Accommodate traversal of ftrace_hash hlist with concurrent insertions.
kernel/trace/ftrace.c +2 -2
@@ -201,7 +201,7 @@ ftrace_ip_in_hash(unsigned long ip, unsigned long key)struct hlist_node *t;int found =0 ; -hlist_for_each_entry (p, t, &ftrace_hash[key], node) { +hlist_for_each_entry_rcu (p, t, &ftrace_hash[key], node) {if (p->ip == ip) { found =1 ;break ;
@@ -214,7 +214,7 @@ ftrace_ip_in_hash(unsigned long ip, unsigned long key)static inline void ftrace_add_hash (struct dyn_ftrace *node,unsigned long key) { -hlist_add_head (&node->node, &ftrace_hash[key]); +hlist_add_head_rcu (&node->node, &ftrace_hash[key]); }static void ftrace_free_rec (struct dyn_ftrace *rec)
Thomas Gleixner
AppliedQuoted 6 lines · Abhishek Sagar
Hi Steven,
I noticed that concurrent instances of
ftrace_record_ip()have a race betweenftrace_hashlist traversal duringftrace_ip_in_hash()(before acquiringftrace_shutdown_lock) and ftrace_add_hash().If it's so then this should fix it.
Applied. Thanks,
tglx