Patchwork [3.5.y.z,extended,stable] Patch "tracing: Fix free of probe entry by calling call_rcu_sched()" has been added to staging queue

mail settings
Submitter Luis Henriques
Date March 25, 2013, 6:02 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/230867/
State New
Headers show


Luis Henriques - March 25, 2013, 6:02 p.m.
This is a note to let you know that I have just added a patch titled

    tracing: Fix free of probe entry by calling call_rcu_sched()

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 44ef71022419362427dd888e1bff079574c30db1 Mon Sep 17 00:00:00 2001
From: "Steven Rostedt (Red Hat)" <>
Date: Wed, 13 Mar 2013 11:15:19 -0400
Subject: [PATCH] tracing: Fix free of probe entry by calling call_rcu_sched()

commit 740466bc89ad8bd5afcc8de220f715f62b21e365 upstream.

Because function tracing is very invasive, and can even trace
calls to rcu_read_lock(), RCU access in function tracing is done
with preempt_disable_notrace(). This requires a synchronize_sched()
for updates and not a synchronize_rcu().

Function probes (traceon, traceoff, etc) must be freed after
a synchronize_sched() after its entry has been removed from the
hash. But call_rcu() is used. Fix this by using call_rcu_sched().

Also fix the usage to use hlist_del_rcu() instead of hlist_del().

Cc: Paul McKenney <>
Signed-off-by: Steven Rostedt <>
Luis Henriques <>
 kernel/trace/ftrace.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)



diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index e5a77ba..1b6ec54 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -3002,8 +3002,8 @@  __unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops,

-			hlist_del(&entry->node);
-			call_rcu(&entry->rcu, ftrace_free_entry_rcu);
+			hlist_del_rcu(&entry->node);
+			call_rcu_sched(&entry->rcu, ftrace_free_entry_rcu);