lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20150414093453.79168e3c@gandalf.local.home>
Date:	Tue, 14 Apr 2015 09:34:53 -0400
From:	Steven Rostedt <rostedt@...dmis.org>
To:	LKML <linux-kernel@...r.kernel.org>
Cc:	Ingo Molnar <mingo@...nel.org>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Rabin Vincent <rabin@....in>
Subject: [for-next][PATCH] tracing: Handle ftrace_dump() atomic context in
 graph_trace_open()

This was just sent to me. It's early in the merge window, and this
isn't an intrusive fix and it passed all my tests, so I'll be sending
this in this merge window.

-- Steve


  git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
for-next

Head SHA1: 64470f5978e636a0b0ca9b48195809cf2f5070f4


Rabin Vincent (1):
      tracing: Handle ftrace_dump() atomic context in graph_trace_open()

----
 kernel/trace/trace_functions_graph.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
---------------------------
commit 64470f5978e636a0b0ca9b48195809cf2f5070f4
Author: Rabin Vincent <rabin@....in>
Date:   Mon Apr 13 22:30:12 2015 +0200

    tracing: Handle ftrace_dump() atomic context in graph_trace_open()
    
    graph_trace_open() can be called in atomic context from ftrace_dump().
    Use GFP_ATOMIC for the memory allocations when that's the case, in order
    to avoid the following splat.
    
     BUG: sleeping function called from invalid context at mm/slab.c:2849
     in_atomic(): 1, irqs_disabled(): 128, pid: 0, name: swapper/0
     Backtrace:
     ..
     [<8004dc94>] (__might_sleep) from [<801371f4>] (kmem_cache_alloc_trace+0x160/0x238)
      r7:87800040 r6:000080d0 r5:810d16e8 r4:000080d0
     [<80137094>] (kmem_cache_alloc_trace) from [<800cbd60>] (graph_trace_open+0x30/0xd0)
      r10:00000100 r9:809171a8 r8:00008e28 r7:810d16f0 r6:00000001 r5:810d16e8
      r4:810d16f0
     [<800cbd30>] (graph_trace_open) from [<800c79c4>] (trace_init_global_iter+0x50/0x9c)
      r8:00008e28 r7:808c853c r6:00000001 r5:810d16e8 r4:810d16f0 r3:800cbd30
     [<800c7974>] (trace_init_global_iter) from [<800c7aa0>] (ftrace_dump+0x90/0x2ec)
      r4:810d2580 r3:00000000
     [<800c7a10>] (ftrace_dump) from [<80414b2c>] (sysrq_ftrace_dump+0x1c/0x20)
      r10:00000100 r9:809171a8 r8:808f6e7c r7:00000001 r6:00000007 r5:0000007a
      r4:808d5394
     [<80414b10>] (sysrq_ftrace_dump) from [<800169b8>] (return_to_handler+0x0/0x18)
     [<80415498>] (__handle_sysrq) from [<800169b8>] (return_to_handler+0x0/0x18)
      r8:808c8100 r7:808c8444 r6:00000101 r5:00000010 r4:84eb3210
     [<80415668>] (handle_sysrq) from [<800169b8>] (return_to_handler+0x0/0x18)
     [<8042a760>] (pl011_int) from [<800169b8>] (return_to_handler+0x0/0x18)
      r10:809171bc r9:809171a8 r8:00000001 r7:00000026 r6:808c6000 r5:84f01e60
      r4:8454fe00
     [<8007782c>] (handle_irq_event_percpu) from [<80077b44>] (handle_irq_event+0x4c/0x6c)
      r10:808c7ef0 r9:87283e00 r8:00000001 r7:00000000 r6:8454fe00 r5:84f01e60
      r4:84f01e00
     [<80077af8>] (handle_irq_event) from [<8007aa28>] (handle_fasteoi_irq+0xf0/0x1ac)
      r6:808f52a4 r5:84f01e60 r4:84f01e00 r3:00000000
     [<8007a938>] (handle_fasteoi_irq) from [<80076dc0>] (generic_handle_irq+0x3c/0x4c)
      r6:00000026 r5:00000000 r4:00000026 r3:8007a938
     [<80076d84>] (generic_handle_irq) from [<80077128>] (__handle_domain_irq+0x8c/0xfc)
      r4:808c1e38 r3:0000002e
     [<8007709c>] (__handle_domain_irq) from [<800087b8>] (gic_handle_irq+0x34/0x6c)
      r10:80917748 r9:00000001 r8:88802100 r7:808c7ef0 r6:808c8fb0 r5:00000015
      r4:8880210c r3:808c7ef0
     [<80008784>] (gic_handle_irq) from [<80014044>] (__irq_svc+0x44/0x7c)
    
    Link: http://lkml.kernel.org/r/1428953721-31349-1-git-send-email-rabin@rab.in
    Link: http://lkml.kernel.org/r/1428957012-2319-1-git-send-email-rabin@rab.in
    
    Signed-off-by: Rabin Vincent <rabin@....in>
    Signed-off-by: Steven Rostedt <rostedt@...dmis.org>

diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index 2d25ad1526bb..b6fce365ef27 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -1309,15 +1309,19 @@ void graph_trace_open(struct trace_iterator *iter)
 {
 	/* pid and depth on the last trace processed */
 	struct fgraph_data *data;
+	gfp_t gfpflags;
 	int cpu;
 
 	iter->private = NULL;
 
-	data = kzalloc(sizeof(*data), GFP_KERNEL);
+	/* We can be called in atomic context via ftrace_dump() */
+	gfpflags = (in_atomic() || irqs_disabled()) ? GFP_ATOMIC : GFP_KERNEL;
+
+	data = kzalloc(sizeof(*data), gfpflags);
 	if (!data)
 		goto out_err;
 
-	data->cpu_data = alloc_percpu(struct fgraph_cpu_data);
+	data->cpu_data = alloc_percpu_gfp(struct fgraph_cpu_data, gfpflags);
 	if (!data->cpu_data)
 		goto out_err_free;
 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ