mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-09-22 22:11:38 +08:00
tracing: Check if tracing is enabled in trace_puts()
If trace_puts() is used very early in boot up, it can crash the machine
if it is called before the ring buffer is allocated. If a trace_printk()
is used with no arguments, then it will be converted into a trace_puts()
and suffer the same fate.
Cc: stable@vger.kernel.org # 3.10+
Fixes: 09ae72348e
"tracing: Add trace_puts() for even faster trace_printk() tracing"
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
71485c4589
commit
3132e107d6
@ -455,6 +455,9 @@ int __trace_puts(unsigned long ip, const char *str, int size)
|
|||||||
unsigned long irq_flags;
|
unsigned long irq_flags;
|
||||||
int alloc;
|
int alloc;
|
||||||
|
|
||||||
|
if (unlikely(tracing_selftest_running || tracing_disabled))
|
||||||
|
return 0;
|
||||||
|
|
||||||
alloc = sizeof(*entry) + size + 2; /* possible \n added */
|
alloc = sizeof(*entry) + size + 2; /* possible \n added */
|
||||||
|
|
||||||
local_save_flags(irq_flags);
|
local_save_flags(irq_flags);
|
||||||
@ -495,6 +498,9 @@ int __trace_bputs(unsigned long ip, const char *str)
|
|||||||
unsigned long irq_flags;
|
unsigned long irq_flags;
|
||||||
int size = sizeof(struct bputs_entry);
|
int size = sizeof(struct bputs_entry);
|
||||||
|
|
||||||
|
if (unlikely(tracing_selftest_running || tracing_disabled))
|
||||||
|
return 0;
|
||||||
|
|
||||||
local_save_flags(irq_flags);
|
local_save_flags(irq_flags);
|
||||||
buffer = global_trace.trace_buffer.buffer;
|
buffer = global_trace.trace_buffer.buffer;
|
||||||
event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
|
event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
|
||||||
|
Loading…
Reference in New Issue
Block a user