[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <tip-b18cc3de00ec3442cf40ac60787dbe0703b99e24@git.kernel.org>
Date: Wed, 7 Dec 2016 05:43:04 -0800
From: tip-bot for Sebastian Andrzej Siewior <tipbot@...or.com>
To: linux-tip-commits@...r.kernel.org
Cc: mingo@...nel.org, penguin-kernel@...ove.SAKURA.ne.jp,
linux-kernel@...r.kernel.org, tglx@...utronix.de,
bigeasy@...utronix.de, hpa@...or.com
Subject: [tip:smp/hotplug] tracing/rb: Init the CPU mask on allocation
Commit-ID: b18cc3de00ec3442cf40ac60787dbe0703b99e24
Gitweb: http://git.kernel.org/tip/b18cc3de00ec3442cf40ac60787dbe0703b99e24
Author: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
AuthorDate: Wed, 7 Dec 2016 14:31:33 +0100
Committer: Thomas Gleixner <tglx@...utronix.de>
CommitDate: Wed, 7 Dec 2016 14:36:21 +0100
tracing/rb: Init the CPU mask on allocation
Before commit b32614c03413 ("tracing/rb: Convert to hotplug state machine")
the allocated cpumask was initialized to the mask of online or possible
CPUs. After the CPU hotplug changes the buffer initialization moved to
trace_rb_cpu_prepare() but the cpumask is allocated with alloc_cpumask()
and therefor has random content. As a consequence the cpu buffers are not
initialized and a later access dereferences a NULL pointer.
Use zalloc_cpumask() instead so trace_rb_cpu_prepare() initializes the
buffers properly.
Fixes: b32614c03413 ("tracing/rb: Convert to hotplug state machine")
Reported-by: Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Cc: rostedt@...dmis.org
Link: http://lkml.kernel.org/r/20161207133133.hzkcqfllxcdi3joz@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
---
kernel/trace/ring_buffer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index a7a055f..89a2611a16 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1297,7 +1297,7 @@ struct ring_buffer *__ring_buffer_alloc(unsigned long size, unsigned flags,
if (!buffer)
return NULL;
- if (!alloc_cpumask_var(&buffer->cpumask, GFP_KERNEL))
+ if (!zalloc_cpumask_var(&buffer->cpumask, GFP_KERNEL))
goto fail_free_buffer;
nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
Powered by blists - more mailing lists