• Steven Rostedt (VMware)'s avatar
    extable: Enable RCU if it is not watching in kernel_text_address() · e8cac8b1
    Steven Rostedt (VMware) authored
    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).
    
    Cc: stable@vger.kernel.org
    Fixes: 0be964be ("module: Sanitize RCU usage and locking")
    Acked-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    e8cac8b1
extable.c 4.73 KB