diff options
Diffstat (limited to 'kernel/trace/ring_buffer.c')
| -rw-r--r-- | kernel/trace/ring_buffer.c | 7 | 
1 files changed, 7 insertions, 0 deletions
| diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 78502d4c7214..a1651edc48d5 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -2198,6 +2198,8 @@ int ring_buffer_resize(struct trace_buffer *buffer, unsigned long size,  				err = -ENOMEM;  				goto out_err;  			} + +			cond_resched();  		}  		cpus_read_lock(); @@ -2388,6 +2390,11 @@ rb_iter_head_event(struct ring_buffer_iter *iter)  	 */  	commit = rb_page_commit(iter_head_page);  	smp_rmb(); + +	/* An event needs to be at least 8 bytes in size */ +	if (iter->head > commit - 8) +		goto reset; +  	event = __rb_page_index(iter_head_page, iter->head);  	length = rb_event_length(event); |