Re: [PATCH v5 15/18] tracing/remotes: Add poll_ms tracefs file

Vincent Donnefort <[email protected]>
Newsgroups org.kernel.vger.linux-trace-kernel,dev.linux.lists.sashiko-reviews
Message-ID <[email protected]>
On Wed, Aug 12, 2026 at 05:13:04PM +0000, [email protected] wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [Low] Data race on `remote->poll_ms` due to lockless reads.
> - [Low] Improper mixing of goto-based error handling and scope-based cleanup (__free) in `trace_remote_iter`.
> --
> 
> --- Patch [15]: [PATCH v5 15/18] tracing/remotes: Add poll_ms tracefs file ---
> commit a661ee191c6d806ed0a716f67237aca890febe25
> Author: Vincent Donnefort <[email protected]>
> 
> tracing/remotes: Add poll_ms tracefs file
> 
> Add a tracefs file to configure the trace remote polling period. Keep
> the default value to 100ms.
> 
> > diff --git a/kernel/trace/trace_remote.c b/kernel/trace/trace_remote.c
> > index 5536e0df43795..b1c75666ab638 100644
> > --- a/kernel/trace/trace_remote.c
> > +++ b/kernel/trace/trace_remote.c
> > @@ -1135,6 +1135,40 @@ static int dump_on_panic_show(struct seq_file *s, void *unused)
> >  }
> >  DEFINE_TRACE_REMOTE_ATTRIBUTE(dump_on_panic);
> >  
> > +static ssize_t poll_ms_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos)
> > +{
> > +	struct seq_file *seq = filp->private_data;
> > +	struct trace_remote *remote = seq->private;
> > +	unsigned int val;
> > +	int ret;
> > +
> > +	ret = kstrtouint_from_user(ubuf, cnt, 10, &val);
> > +	if (ret)
> > +		return ret;
> > +
> > +	if (!val)
> > +		return -EINVAL;
> > +
> > +	guard(mutex)(&remote->lock);
> > +
> > +	if (val < remote->poll_ms && remote->poll_cnt)
> > +		mod_delayed_work(system_percpu_wq, &remote->poll_work, msecs_to_jiffies(val));
> > +
> > +	remote->poll_ms = val;
> > +
> > +	return cnt;
> > +}
> > +
> > +static int poll_ms_show(struct seq_file *s, void *unused)
> > +{
> > +	struct trace_remote *remote = s->private;
> > +
> > +	seq_printf(s, "%u\n", remote->poll_ms);
> 
> [Severity: Low]
> Does this code introduce a data race on remote->poll_ms?
> 
> In poll_ms_write(), remote->poll_ms is modified while holding remote->lock.
> However, in poll_ms_show(), remote->poll_ms is read without holding
> remote->lock.
> 
> It appears this could also cause a data race with lockless reads in
> trace_remote_do_poll():
> 
> kernel/trace/trace_remote.c:trace_remote_do_poll() {
>     ...
> 	schedule_delayed_work(&remote->poll_work, yield ? 0 : msecs_to_jiffies(remote->poll_ms));
> }
> 
> Could this concurrent read and write cause a data race, potentially leading
> to torn reads or violating kernel concurrency expectations?

Fair enough... I'll WRITE_ONCE/READ_ONCE.

-- 
Vincent

> 
> [ ... ]
> 
> Also, looking at trace_remote_iter() in kernel/trace/trace_remote.c:
> 
> kernel/trace/trace_remote.c:trace_remote_iter() {
> 	struct trace_remote_iterator *iter __free(kfree) = kzalloc_obj(*iter);
>     ...
> 		if (WARN_ON_ONCE(remote->dmesg)) {
> 			ret = -EBUSY;
> 			goto err;
> 		}
>     ...
> err:
> 	switch (type) {
> 	case TRI_PANIC:
> 		break;
> 	default:
> 		trace_remote_put(remote);
> 	}
> 	return ERR_PTR(ret);
> }
> 
> [Severity: Low]
> Does this code incorrectly mix goto-based error handling and scope-based
> cleanup (__free)?
> 
> The cleanup subsystem guidelines prohibit mixing goto-based error paths
> with __free() variable declarations in the same function. While it does not
> appear to cause a concrete resource leak or double-free in this specific
> instance, could this create confusing ownership semantics and risk future
> bugs during refactoring?
> 
> -- 
> Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=15
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.