aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <rostedt@goodmis.org>2008-09-29 23:02:39 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-14 04:38:55 -0400
commita7b1374333407f409cf8df7e623b12490f073c84 (patch)
treeecd83a07e17b6659896010adc7ceaa56eb08d12b
parent7a8e76a3829f1067b70f715771ff88baf2fbf3c3 (diff)
ring_buffer: add paranoid check for buffer page
If for some strange reason the buffer_page gets bigger, or the page struct gets smaller, I want to know this ASAP. The best way is to not let the kernel compile. This patch adds code to test the size of the struct buffer_page against the page struct and will cause compile issues if the buffer_page ever gets bigger than the page struct. Signed-off-by: Steven Rostedt <srostedt@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--kernel/trace/ring_buffer.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 830a2930dd91..95ca9338cb6c 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -289,6 +289,12 @@ static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer)
289 kfree(cpu_buffer); 289 kfree(cpu_buffer);
290} 290}
291 291
292/*
293 * Causes compile errors if the struct buffer_page gets bigger
294 * than the struct page.
295 */
296extern int ring_buffer_page_too_big(void);
297
292/** 298/**
293 * ring_buffer_alloc - allocate a new ring_buffer 299 * ring_buffer_alloc - allocate a new ring_buffer
294 * @size: the size in bytes that is needed. 300 * @size: the size in bytes that is needed.
@@ -305,6 +311,11 @@ struct ring_buffer *ring_buffer_alloc(unsigned long size, unsigned flags)
305 int bsize; 311 int bsize;
306 int cpu; 312 int cpu;
307 313
314 /* Paranoid! Optimizes out when all is well */
315 if (sizeof(struct buffer_page) > sizeof(struct page))
316 ring_buffer_page_too_big();
317
318
308 /* keep it in its own cache line */ 319 /* keep it in its own cache line */
309 buffer = kzalloc(ALIGN(sizeof(*buffer), cache_line_size()), 320 buffer = kzalloc(ALIGN(sizeof(*buffer), cache_line_size()),
310 GFP_KERNEL); 321 GFP_KERNEL);