Patch "tracing/samples: Fix creation and deletion of simple_thread_fn creation" has been added to the 4.4-stable tree
This is a note to let you know that I've just added the patch titled
tracing/samples: Fix creation and deletion of simple_thread_fn creation
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
tracing-samples-fix-creation-and-deletion-of-simple_thread_fn-creation.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6575257c60e1a26a5319ccf2b5ce5b6449001017Mon Sep 17 00:00:00 2001
From: "Steven Rostedt (VMware)" <[email protected]>
Date: Tue, 17 Oct 2017 14:55:24 -0400
Subject: tracing/samples: Fix creation and deletion of simple_thread_fn creation
From: Steven Rostedt (VMware) <[email protected]>
commit 6575257c60e1a26a5319ccf2b5ce5b6449001017 upstream.
Commit 7496946a8 ("tracing: Add samples of DECLARE_EVENT_CLASS() and DEFINE_EVENT()") added template examples for all the events. It created a DEFINE_EVENT_FN() example which reused the foo_bar_reg and foo_bar_unreg functions.
Enabling both the TRACE_EVENT_FN() and DEFINE_EVENT_FN() example trace events caused the foo_bar_reg to be called twice, creating the test thread twice. The foo_bar_unreg would remove it only once, even if it was called multiple times, leaving a thread existing when the module is unloaded, causing an oops.
Add a ref count and allow foo_bar_reg() and foo_bar_unreg() be called by multiple trace events.
--- samples/trace_events/trace-events-sample.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
samples/trace_events/trace-events-sample.c +11 -3
@@ -78,28 +78,36 @@ static int simple_thread_fn(void *arg) }static DEFINE_MUTEX (thread_mutex); +static bool simple_thread_cnt;void foo_bar_reg (void ) { +mutex_lock (&thread_mutex); +if (simple_thread_cnt++) + goto out; +pr_info ("Starting thread for foo_bar_fn\n" );/* * We shouldn't be able to start a trace when the module is * unloading (there's other locks to prevent that). But * for consistency sake, we still take the thread_mutex. */ -mutex_lock (&thread_mutex); simple_tsk_fn =kthread_run (simple_thread_fn,NULL ,"event-sample-fn" ); + out:mutex_unlock (&thread_mutex); }void foo_bar_unreg (void ) { -pr_info ("Killing thread for foo_bar_fn\n" ); -/* protect against module unloading */ mutex_lock (&thread_mutex); +if (--simple_thread_cnt) + goto out; + +pr_info ("Killing thread for foo_bar_fn\n" );if (simple_tsk_fn)kthread_stop (simple_tsk_fn); simple_tsk_fn =NULL ; + out:mutex_unlock (&thread_mutex); }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/tracing-samples-fix-creation-and-deletion-of-simple_thread_fn-creation.patch queue-4.4/fix-tracing-sample-code-warning.patch