Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 985e871b authored by Steven Rostedt (Red Hat)'s avatar Steven Rostedt (Red Hat) Committed by Steven Rostedt
Browse files

ring-buffer: Add trace_recursive checks to ring_buffer_write()



The ring_buffer_write() function isn't protected by the trace recursive
writes. Luckily, this function is not used as much and is unlikely
to ever recurse. But it should still have the protection, because
even a call to ring_buffer_lock_reserve() could cause ring buffer
corruption if called when ring_buffer_write() is being used.

Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 6776221b
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -3013,9 +3013,12 @@ int ring_buffer_write(struct ring_buffer *buffer,
	if (length > BUF_MAX_DATA_SIZE)
		goto out;

	if (unlikely(trace_recursive_lock(cpu_buffer)))
		goto out;

	event = rb_reserve_next_event(buffer, cpu_buffer, length);
	if (!event)
		goto out;
		goto out_unlock;

	body = rb_event_data(event);

@@ -3026,6 +3029,10 @@ int ring_buffer_write(struct ring_buffer *buffer,
	rb_wakeups(buffer, cpu_buffer);

	ret = 0;

 out_unlock:
	trace_recursive_unlock(cpu_buffer);

 out:
	preempt_enable_notrace();