From: Steven Rostedt <rostedt@goodmis.org>
To: sashiko-bot@kernel.org
Cc: sashiko-reviews@lists.linux.dev,
"Vincent Donnefort" <vdonnefort@google.com>,
linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v7 1/3] tracing: Fix subbuf resize races with trace_pipe_raw readers
Date: Sat, 22 Aug 2026 11:04:24 -0400 [thread overview]
Message-ID: <20260822110424.346fa3c8@fedora> (raw)
In-Reply-To: <20260817140812.2C7D41F00A3A@smtp.kernel.org>
On Mon, 17 Aug 2026 14:08:11 +0000
sashiko-bot@kernel.org wrote:
> > diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> > index 395238b2b715c..737922b236d46 100644
> > --- a/kernel/trace/trace.c
> > +++ b/kernel/trace/trace.c
> [ ... ]
> > @@ -7128,7 +7116,9 @@ ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
> > iter->cpu_file, 0);
> > trace_access_unlock(iter->cpu_file);
> >
> > - if (ret < 0) {
> > + if (ret == -EAGAIN) {
> > + goto again;
> > + } else if (ret < 0) {
>
> [Severity: High]
> If ring_buffer_read_page() returns -EAGAIN because the subbuffer order was
> updated but cpu_buffer->reader_page->order hasn't been updated yet, this
> branches back to the again label.
>
> Since the loop does not yield the CPU or call cond_resched(), could this cause
> a hard lockup if the reader and the resize thread are on the same CPU?
Hmm, this looks legit. We should at least have a way to break out if it
loops too many times.
>
> > if (trace_empty(iter) && !iter->closed) {
> > if (update_last_data_if_empty(iter->tr))
> > return 0;
> [ ... ]
> > - ref->page = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file);
> > - if (IS_ERR(ref->page)) {
> > - ret = PTR_ERR(ref->page);
> > - ref->page = NULL;
> > +
> > +new_read_page:
> > + ret = ring_buffer_alloc_read_page(ref->buffer, iter->cpu_file, &ref->rpage);
> > + if (ret) {
> > kfree(ref);
> > break;
> > }
> > ref->cpu = iter->cpu_file;
> >
> > - r = ring_buffer_read_page(ref->buffer, ref->page,
> > - len, iter->cpu_file, 1);
> > + page_size = ring_buffer_read_page_size(ref->rpage);
> > +
> > + r = -EINVAL;
> > + if (IS_ALIGNED(*ppos, page_size) && len >= page_size) {
> > + r = ring_buffer_read_page(ref->buffer, ref->rpage, len, iter->cpu_file, 1);
> > + if (r == -EAGAIN)
> > + goto new_read_page;
>
> [Severity: High]
> Similar to the read path above, this catches -EAGAIN and loops back to
> new_read_page.
>
> Because goto new_read_page executes continuously without releasing
> trace_access_lock() or yielding the CPU, can this permanently deadlock the
> system during a resize by preventing the resize thread from acquiring the
> necessary locks?
This also looks legit.
-- Steve
>
> > + } else if (!i) {
> > + /*
> > + * If the first iteration fails this is an invalid userspace input.
> > + * Otherwise, this is because the subbuf order has been modified. Do not
> > + * report an error and finish the read.
> > + */
> > + ret = -EINVAL;
> > + }
>
next prev parent reply other threads:[~2026-08-22 15:04 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-17 13:47 [PATCH v7 0/3] ring-buffer: Fixes for subbuf resizing and persistent buffers Vincent Donnefort
2026-08-17 13:47 ` [PATCH v7 1/3] tracing: Fix subbuf resize races with trace_pipe_raw readers Vincent Donnefort
2026-08-17 14:08 ` sashiko-bot
2026-08-22 15:04 ` Steven Rostedt [this message]
2026-08-23 20:09 ` Vincent Donnefort
2026-08-24 14:53 ` Steven Rostedt
2026-08-25 8:26 ` Vincent Donnefort
2026-08-25 12:47 ` Steven Rostedt
2026-08-25 12:52 ` Vincent Donnefort
2026-08-25 14:25 ` Steven Rostedt
2026-08-17 13:47 ` [PATCH v7 2/3] ring-buffer: Cap static ring buffer nr_pages Vincent Donnefort
2026-08-17 14:03 ` sashiko-bot
2026-08-17 13:47 ` [PATCH v7 3/3] ring-buffer: Prevent truncation of nr_pages / nr_subbufs Vincent Donnefort
2026-08-17 13:59 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260822110424.346fa3c8@fedora \
--to=rostedt@goodmis.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=sashiko-bot@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=vdonnefort@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.