[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20251230222035.199100bc@pumpkin>
Date: Tue, 30 Dec 2025 22:20:35 +0000
From: David Laight <david.laight.linux@...il.com>
To: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc: Sun Jian <sun.jian.kdev@...il.com>, Vaibhav Agarwal
<vaibhav.sr@...il.com>, Johan Hovold <johan@...nel.org>, Mark Greer
<mgreer@...malcreek.com>, Alex Elder <elder@...nel.org>,
greybus-dev@...ts.linaro.org, linux-staging@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3] staging: greybus: audio: avoid snprintf truncation
warnings
On Tue, 30 Dec 2025 08:40:48 +0100
Greg Kroah-Hartman <gregkh@...uxfoundation.org> wrote:
> On Tue, Dec 30, 2025 at 09:29:08AM +0800, Sun Jian wrote:
> > W=1 reports possible truncation when formatting widget/control names
> > with snprintf() and a %s argument. Use a small helper and hide the %s
> > pointer from the compiler's truncation analysis via OPTIMIZER_HIDE_VAR(),
> > while keeping the existing snprintf() formatting.
> >
> > No functional change intended.
> >
> > Signed-off-by: Sun Jian <sun.jian.kdev@...il.com>
> >
> > Changes in v3:
> > - Replace the earlier scnprintf()/strlcat() approach with a helper
> > keeping snprintf().
> > - Hide the %s argument from compiler truncation analysis using
> > OPTIMIZER_HIDE_VAR().
> > - Add a small local length limit macro with a short comment.
> > ---
>
> The "changes" go below the --- line, as the documentation asks for. And
> please include what changed from versions prior to that as well.
>
> But:
>
> > drivers/staging/greybus/audio_topology.c | 22 +++++++++++++++-------
> > 1 file changed, 15 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/staging/greybus/audio_topology.c b/drivers/staging/greybus/audio_topology.c
> > index 76146f91cddc..35775067897c 100644
> > --- a/drivers/staging/greybus/audio_topology.c
> > +++ b/drivers/staging/greybus/audio_topology.c
> > @@ -1009,6 +1009,19 @@ static const struct snd_soc_dapm_widget gbaudio_widgets[] = {
> > SND_SOC_DAPM_POST_PMD),
> > };
> >
> > +/* Limit %s length to avoid -Wformat-truncation with snprintf() */
> > +#define GB_NAME_TMP_LEN 32
> > +
> > +static void gbaudio_prefix_dev_id(char *name, size_t name_len,
> > + unsigned int dev_id)
> > +{
> > + char temp_name[GB_NAME_TMP_LEN], *cp = temp_name;
> > +
> > + strscpy(temp_name, name, sizeof(temp_name));
> > + OPTIMIZER_HIDE_VAR(cp);
>
> What? Why? That feels wrong. Let's not add hacks for broken
> compilers.
I don't like it either.
But I don't know of any other way of silencing that compiler warning.
It is actually a real PITA and mostly pointless.
After all it only warns about strings it knows the maximum size of.
It is more likely that a truncation 'bug' will happen for an indefinite
length string.
After all, the whole point about snprintf() is that it truncates.
I can well imagine that trying to stop the 'format overflow' warning
has actually created bugs!
David
>
> > + snprintf(name, name_len, "GB %u %s", dev_id, cp);
> > +}
> > +
> > static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
> > struct snd_soc_dapm_widget *dw,
> > struct gb_audio_widget *w, int *w_size)
> > @@ -1018,7 +1031,6 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
> > struct gb_audio_control *curr;
> > struct gbaudio_control *control, *_control;
> > size_t size;
> > - char temp_name[NAME_SIZE];
> >
> > ret = gbaudio_validate_kcontrol_count(w);
> > if (ret) {
> > @@ -1086,8 +1098,7 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
> > }
> >
> > /* Prefix dev_id to widget control_name */
> > - strscpy(temp_name, w->name, sizeof(temp_name));
> > - snprintf(w->name, sizeof(w->name), "GB %d %s", module->dev_id, temp_name);
> > + gbaudio_prefix_dev_id(w->name, sizeof(w->name), module->dev_id);
>
> This feels like a broken tool, let's not do foolish things just to make
> compilers quiet. W=1 is not a good reason to just make things "silent"
> by moving code around like you did here.
>
> sorry,
>
> greg k-h
Powered by blists - more mailing lists