tracing: Do not allow stack_tracer to record stack in NMI
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>
Wed, 21 Oct 2015 01:48:02 +0000 (21:48 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Wed, 21 Oct 2015 01:52:23 +0000 (21:52 -0400)
The code in stack tracer should not be executed within an NMI as it grabs
spinlocks and stack tracing an NMI gives the possibility of causing a
deadlock. Although this is safe on x86_64, because it does not perform stack
traces when the task struct stack is not in use (interrupts and NMIs), it
may be an issue for NMIs on i386 and other archs that use the same stack as
the NMI.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace_stack.c

index 5f29402bff0f893f15b1315bb1e8ade28c7b1246..8abf1ba18085742af78176dbc514095a47643c9c 100644 (file)
@@ -85,6 +85,10 @@ check_stack(unsigned long ip, unsigned long *stack)
        if (!object_is_on_stack(stack))
                return;
 
+       /* Can't do this from NMI context (can cause deadlocks) */
+       if (in_nmi())
+               return;
+
        local_irq_save(flags);
        arch_spin_lock(&max_stack_lock);