From: "Steven Rostedt (Google)" <rost...@goodmis.org> [ Upstream commit b81e03a24966dca0b119eff0549a4e44befff419 ]
As all the subbuffer order (subbuffer sizes) must be the same throughout the ring buffer, check the order of the buffers that are doing a CPU buffer swap in ring_buffer_swap_cpu() to make sure they are the same. If the are not the same, then fail to do the swap, otherwise the ring buffer will think the CPU buffer has a specific subbuffer size when it does not. Link: https://lore.kernel.org/linux-trace-kernel/20231219185629.467894...@goodmis.org Cc: Masami Hiramatsu <mhira...@kernel.org> Cc: Mark Rutland <mark.rutl...@arm.com> Cc: Mathieu Desnoyers <mathieu.desnoy...@efficios.com> Cc: Andrew Morton <a...@linux-foundation.org> Cc: Tzvetomir Stoyanov <tz.stoya...@gmail.com> Cc: Vincent Donnefort <vdonnef...@google.com> Cc: Kent Overstreet <kent.overstr...@gmail.com> Signed-off-by: Steven Rostedt (Google) <rost...@goodmis.org> Signed-off-by: Sasha Levin <sas...@kernel.org> --- kernel/trace/ring_buffer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 9286f88fcd32..f9d9309884d1 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -5461,6 +5461,9 @@ int ring_buffer_swap_cpu(struct trace_buffer *buffer_a, if (cpu_buffer_a->nr_pages != cpu_buffer_b->nr_pages) goto out; + if (buffer_a->subbuf_order != buffer_b->subbuf_order) + goto out; + ret = -EAGAIN; if (atomic_read(&buffer_a->record_disabled)) -- 2.43.0