linux/kernel/trace
Steven Rostedt 9be24414aa tracing/wakeup: move access to wakeup_cpu into spinlock
The code had the following outside the lock:

        if (next != wakeup_task)
                return;

        pc = preempt_count();

        /* The task we are waiting for is waking up */
        data = wakeup_trace->data[wakeup_cpu];

On initialization, wakeup_task is NULL and wakeup_cpu -1. This code
is not under a lock. If wakeup_task is set on another CPU as that
task is waking up, we can see the wakeup_task before wakeup_cpu is
set. If we read wakeup_cpu while it is still -1 then we will have
a bad data pointer.

This patch moves the reading of wakeup_cpu within the protection of
the spinlock used to protect the writing of wakeup_cpu and wakeup_task.

[ Impact: remove possible race causing invalid pointer dereference ]

Reported-by: Maneesh Soni <maneesh@in.ibm.com>
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
2009-04-23 23:01:36 -04:00
..
blktrace.c blktrace: fix context-info when mixed-using blk tracer and trace events 2009-04-16 10:11:01 +02:00
ftrace.c ftrace: use module notifier for function tracer 2009-04-17 16:59:15 +02:00
Kconfig tracing: rename EVENT_TRACER config to ENABLE_EVENT_TRACING 2009-04-20 17:55:35 +02:00
kmemtrace.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
Makefile tracing/events: move the ftrace event tracing code to core 2009-04-14 12:57:59 -04:00
ring_buffer.c ring-buffer: only warn on wrap if buffer is bigger than two pages 2009-04-21 16:00:45 +02:00
trace_boot.c tracing: use macros to denote usec and nsec per second 2009-04-07 14:43:06 +02:00
trace_branch.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
trace_clock.c
trace_event_profile.c tracing/events: convert event call sites to use a link list 2009-04-14 12:58:00 -04:00
trace_event_types.h tracing/filters: add TRACE_EVENT_FORMAT_NOFILTER event macro 2009-04-14 00:00:51 +02:00
trace_events_filter.c tracing/filters: allow user-input to be integer-like string 2009-04-21 11:58:28 +02:00
trace_events.c tracing/events: make struct trace_entry->type to be int type 2009-04-22 11:36:38 +02:00
trace_export.c tracing/filters: allow on-the-fly filter switching 2009-04-14 00:03:55 +02:00
trace_functions_graph.c function-graph: add option to calculate graph time or not 2009-03-24 23:41:11 -04:00
trace_functions.c
trace_hw_branches.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
trace_irqsoff.c
trace_mmiotrace.c tracing: use macros to denote usec and nsec per second 2009-04-07 14:43:06 +02:00
trace_nop.c
trace_output.c tracing/events: add export symbols for trace events in modules 2009-04-14 12:58:01 -04:00
trace_output.h tracing/events: move declarations from trace directory to core include 2009-04-14 12:57:58 -04:00
trace_power.c tracing/filters: use ring_buffer_discard_commit() in filter_check_discard() 2009-04-14 00:00:56 +02:00
trace_printk.c tracing/ftrace: factorize the tracing files creation 2009-04-07 14:43:07 +02:00
trace_sched_switch.c tracing/events: move trace point headers into include/trace/events 2009-04-14 22:05:43 -04:00
trace_sched_wakeup.c tracing/wakeup: move access to wakeup_cpu into spinlock 2009-04-23 23:01:36 -04:00
trace_selftest_dynamic.c
trace_selftest.c
trace_stack.c tracing/ftrace: factorize the tracing files creation 2009-04-07 14:43:07 +02:00
trace_stat.c Merge branch 'linus' into tracing/core 2009-04-07 13:47:45 +02:00
trace_stat.h
trace_syscalls.c tracing/syscalls: use a dedicated file header 2009-04-09 05:43:32 +02:00
trace_sysprof.c tracing/ftrace: factorize the tracing files creation 2009-04-07 14:43:07 +02:00
trace_workqueue.c Merge branch 'linus' into tracing/core 2009-04-07 13:47:45 +02:00
trace.c tracing/events: make struct trace_entry->type to be int type 2009-04-22 11:36:38 +02:00
trace.h tracing/events: make struct trace_entry->type to be int type 2009-04-22 11:36:38 +02:00