stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Patch "extable: Enable RCU if it is not watching in kernel_text_address()" has been added to the 4.13-stable tree
@ 2017-10-02 12:00 gregkh
  0 siblings, 0 replies; only message in thread
From: gregkh @ 2017-10-02 12:00 UTC (permalink / raw)
  To: rostedt, gregkh, paulmck; +Cc: stable, stable-commits


This is a note to let you know that I've just added the patch titled

    extable: Enable RCU if it is not watching in kernel_text_address()

to the 4.13-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:
     extable-enable-rcu-if-it-is-not-watching-in-kernel_text_address.patch
and it can be found in the queue-4.13 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


>From e8cac8b1d10589be45671a5ade0926a639b543b7 Mon Sep 17 00:00:00 2001
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
Date: Fri, 22 Sep 2017 17:36:32 -0400
Subject: extable: Enable RCU if it is not watching in kernel_text_address()

From: Steven Rostedt (VMware) <rostedt@goodmis.org>

commit e8cac8b1d10589be45671a5ade0926a639b543b7 upstream.

If kernel_text_address() is called when RCU is not watching, it can cause an
RCU bug because is_module_text_address(), the is_kprobe_*insn_slot()
and is_bpf_text_address() functions require the use of RCU.

Only enable RCU if it is not currently watching before it calls
is_module_text_address(). The use of rcu_nmi_enter() is used to enable RCU
because kernel_text_address() can happen pretty much anywhere (like an NMI),
and even from within an NMI. It is called via save_stack_trace() that can be
called by any WARN() or tracing function, which can happen while RCU is not
watching (for example, going to or coming from idle, or during CPU take down
or bring up).

Fixes: 0be964be0 ("module: Sanitize RCU usage and locking")
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/extable.c |   35 ++++++++++++++++++++++++++++++-----
 1 file changed, 30 insertions(+), 5 deletions(-)

--- a/kernel/extable.c
+++ b/kernel/extable.c
@@ -119,17 +119,42 @@ int __kernel_text_address(unsigned long
 
 int kernel_text_address(unsigned long addr)
 {
+	bool no_rcu;
+	int ret = 1;
+
 	if (core_kernel_text(addr))
 		return 1;
+
+	/*
+	 * If a stack dump happens while RCU is not watching, then
+	 * RCU needs to be notified that it requires to start
+	 * watching again. This can happen either by tracing that
+	 * triggers a stack trace, or a WARN() that happens during
+	 * coming back from idle, or cpu on or offlining.
+	 *
+	 * is_module_text_address() as well as the kprobe slots
+	 * and is_bpf_text_address() require RCU to be watching.
+	 */
+	no_rcu = !rcu_is_watching();
+
+	/* Treat this like an NMI as it can happen anywhere */
+	if (no_rcu)
+		rcu_nmi_enter();
+
 	if (is_module_text_address(addr))
-		return 1;
+		goto out;
 	if (is_ftrace_trampoline(addr))
-		return 1;
+		goto out;
 	if (is_kprobe_optinsn_slot(addr) || is_kprobe_insn_slot(addr))
-		return 1;
+		goto out;
 	if (is_bpf_text_address(addr))
-		return 1;
-	return 0;
+		goto out;
+	ret = 0;
+out:
+	if (no_rcu)
+		rcu_nmi_exit();
+
+	return ret;
 }
 
 /*


Patches currently in stable-queue which might be from rostedt@goodmis.org are

queue-4.13/extable-enable-rcu-if-it-is-not-watching-in-kernel_text_address.patch
queue-4.13/tracing-erase-irqsoff-trace-with-empty-write.patch
queue-4.13/tracing-fix-trace_pipe-behavior-for-instance-traces.patch
queue-4.13/rcu-allow-for-page-faults-in-nmi-handlers.patch
queue-4.13/genirq-fix-cpumask-check-in-__irq_startup_managed.patch
queue-4.13/tracing-remove-rcu-work-arounds-from-stack-tracer.patch
queue-4.13/extable-consolidate-kernel_text_address-functions.patch

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-10-02 11:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-02 12:00 Patch "extable: Enable RCU if it is not watching in kernel_text_address()" has been added to the 4.13-stable tree gregkh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).