[PATCH] staging: greybus: avoid snprintf truncation in audio topology
From: Eduard Zateev
Date: Tue Sep 22 2026 - 22:39:17 EST
Building with W=1 reports format truncation warnings when prefixing
the Greybus device id to widget and control names.
The destination buffers are NAME_SIZE bytes, while the copied topology
names may already take most of that space. Split the operation into
writing the prefix first and then copying the remaining name into the
space left in the destination buffer.
This avoids the -Wformat-truncation warnings while preserving bounded
string handling.
Signed-off-by: Eduard Zateev <hackerowskiy@xxxxxxxxx>
---
drivers/staging/greybus/audio_topology.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/greybus/audio_topology.c b/drivers/staging/greybus/audio_topology.c
index 76146f91cddc..72a71fd38312 100644
--- a/drivers/staging/greybus/audio_topology.c
+++ b/drivers/staging/greybus/audio_topology.c
@@ -1019,6 +1019,7 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
struct gbaudio_control *control, *_control;
size_t size;
char temp_name[NAME_SIZE];
+ int name_len;
ret = gbaudio_validate_kcontrol_count(w);
if (ret) {
@@ -1087,7 +1088,8 @@ 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);
+ name_len = scnprintf(w->name, sizeof(w->name), "GB %d ", module->dev_id);
+ strscpy(w->name + name_len, temp_name, sizeof(w->name) - name_len);
switch (w->type) {
case snd_soc_dapm_spk:
@@ -1144,6 +1146,7 @@ static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module,
struct gbaudio_control *control, *_control;
size_t size;
char temp_name[NAME_SIZE];
+ int name_len;
size = sizeof(struct snd_kcontrol_new) * module->num_controls;
dapm_kctls = devm_kzalloc(module->dev, size, GFP_KERNEL);
@@ -1169,8 +1172,10 @@ static int gbaudio_tplg_process_kcontrols(struct gbaudio_module_info *module,
control->id = curr->id;
/* Prefix dev_id to widget_name */
strscpy(temp_name, curr->name, sizeof(temp_name));
- snprintf(curr->name, sizeof(curr->name), "GB %d %s", module->dev_id,
- temp_name);
+ name_len = scnprintf(curr->name, sizeof(curr->name), "GB %d ",
+ module->dev_id);
+ strscpy(curr->name + name_len, temp_name,
+ sizeof(curr->name) - name_len);
control->name = curr->name;
if (curr->info.type == GB_AUDIO_CTL_ELEM_TYPE_ENUMERATED) {
struct gb_audio_enumerated *gbenum =
--
2.55.0