lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20231210040450.561181051@goodmis.org> Date: Sat, 09 Dec 2023 22:54:12 -0500 From: Steven Rostedt <rostedt@...dmis.org> To: linux-kernel@...r.kernel.org, linux-trace-kernel@...r.kernel.org Cc: Masami Hiramatsu <mhiramat@...nel.org>, Mark Rutland <mark.rutland@....com>, Mathieu Desnoyers <mathieu.desnoyers@...icios.com>, Andrew Morton <akpm@...ux-foundation.org>, Tzvetomir Stoyanov <tz.stoyanov@...il.com>, Vincent Donnefort <vdonnefort@...gle.com>, Kent Overstreet <kent.overstreet@...il.com> Subject: [PATCH 08/14] ring-buffer: Make sure the spare sub buffer used for reads has same size From: "Steven Rostedt (Google)" <rostedt@...dmis.org> Now that the ring buffer specifies the size of its sub buffers, they all need to be the same size. When doing a read, a swap is done with a spare page. Make sure they are the same size before doing the swap, otherwise the read will fail. Signed-off-by: Steven Rostedt (Google) <rostedt@...dmis.org> --- kernel/trace/trace.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 8e9853d38c8d..b3b36d7f1201 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -7567,6 +7567,7 @@ struct ftrace_buffer_info { struct trace_iterator iter; void *spare; unsigned int spare_cpu; + unsigned int spare_size; unsigned int read; }; @@ -8286,6 +8287,15 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, page_size = ring_buffer_subbuf_size_get(iter->array_buffer->buffer); + /* Make sure the spare matches the current sub buffer size */ + if (info->spare) { + if (page_size != info->spare_size) { + ring_buffer_free_read_page(iter->array_buffer->buffer, + info->spare_cpu, info->spare); + info->spare = NULL; + } + } + if (!info->spare) { info->spare = ring_buffer_alloc_read_page(iter->array_buffer->buffer, iter->cpu_file); @@ -8294,6 +8304,7 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, info->spare = NULL; } else { info->spare_cpu = iter->cpu_file; + info->spare_size = page_size; } } if (!info->spare) -- 2.42.0
Powered by blists - more mailing lists