]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit
extable: Enable RCU if it is not watching in kernel_text_address()
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Fri, 22 Sep 2017 21:36:32 +0000 (17:36 -0400)
committerSeth Forshee <seth.forshee@canonical.com>
Thu, 12 Oct 2017 21:20:38 +0000 (16:20 -0500)
commit16066bfe41452ebcc028dbb8910b419c53701055
tree444de742553472983e5c93b0e03480bc9084d2d9
parent60bef0c86590784bf81bdfe7265ca95b431df812
extable: Enable RCU if it is not watching in kernel_text_address()

BugLink: http://bugs.launchpad.net/bugs/1721777
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>
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
kernel/extable.c