diff options
| -rw-r--r-- | kernel/trace/trace.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 30338a835a51..78842557eea0 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2802,11 +2802,17 @@ static char *get_trace_buf(void)  	if (!buffer || buffer->nesting >= 4)  		return NULL; -	return &buffer->buffer[buffer->nesting++][0]; +	buffer->nesting++; + +	/* Interrupts must see nesting incremented before we use the buffer */ +	barrier(); +	return &buffer->buffer[buffer->nesting][0];  }  static void put_trace_buf(void)  { +	/* Don't let the decrement of nesting leak before this */ +	barrier();  	this_cpu_dec(trace_percpu_buffer->nesting);  }  | 

