From: Takashi Iwai <tiwai@suse.de>
To: Pengpeng Hou <pengpeng@iscas.ac.cn>
Cc: perex@perex.cz, tiwai@suse.com, linux-sound@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] ALSA: asihpi: use scnprintf() for control name formatting
Date: Sat, 28 Mar 2026 10:52:39 +0100 [thread overview]
Message-ID: <877bqwwaag.wl-tiwai@suse.de> (raw)
In-Reply-To: <20260327234848.64134-1-pengpeng@iscas.ac.cn>
On Sat, 28 Mar 2026 00:48:48 +0100,
Pengpeng Hou wrote:
>
> asihpi_ctl_init() builds mixer control names in the fixed 44-byte
> hpi_ctl->name buffer with sprintf().
>
> This is not only a defensive cleanup. The current in-tree name tables and
> format strings can already exceed 44 bytes. For example,
>
> "Bitstream 0 Internal 0 Monitor Playback Volume"
>
> is 46 characters before the trailing NUL, so the current sprintf() call
> writes past the end of hpi_ctl->name.
>
> Switch the formatting to scnprintf() so the driver truncates control
> names instead of overflowing the fixed ALSA control name storage.
>
> Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Thanks, now it's clearer. But if the string overflow can happen
really, it's rather a bigger problem; then we can't blindly truncate
the string as it's used as the control API element key.
I guess this didn't happen in reality because the choice of source and
destination depends on the firmware and the selection like the above
didn't exist so far in the provided firmware data. But, we still
should address the problem, of course.
Anyways, if the truncation happens, we'd rather need to notify users
that it's basically an error. That is, we should use snprintf() in
this case and have a return value check. If it's truncated, the
driver spews the error, showing the truncated string.
Could you revise the patch in that way and resubmit v3?
thanks,
Takashi
> ---
> sound/pci/asihpi/asihpi.c | 31 +++++++++++++++++--------------
> 1 file changed, 17 insertions(+), 14 deletions(-)
>
> diff --git a/sound/pci/asihpi/asihpi.c b/sound/pci/asihpi/asihpi.c
> index 3a64d0562803..de2859eb3e9f 100644
> --- a/sound/pci/asihpi/asihpi.c
> +++ b/sound/pci/asihpi/asihpi.c
> @@ -1384,22 +1384,25 @@ static void asihpi_ctl_init(struct snd_kcontrol_new *snd_control,
> dir = "Playback "; /* PCM Playback source, or output node */
>
> if (hpi_ctl->src_node_type && hpi_ctl->dst_node_type)
> - sprintf(hpi_ctl->name, "%s %d %s %d %s%s",
> - asihpi_src_names[hpi_ctl->src_node_type],
> - hpi_ctl->src_node_index,
> - asihpi_dst_names[hpi_ctl->dst_node_type],
> - hpi_ctl->dst_node_index,
> - dir, name);
> + scnprintf(hpi_ctl->name, sizeof(hpi_ctl->name),
> + "%s %d %s %d %s%s",
> + asihpi_src_names[hpi_ctl->src_node_type],
> + hpi_ctl->src_node_index,
> + asihpi_dst_names[hpi_ctl->dst_node_type],
> + hpi_ctl->dst_node_index,
> + dir, name);
> else if (hpi_ctl->dst_node_type) {
> - sprintf(hpi_ctl->name, "%s %d %s%s",
> - asihpi_dst_names[hpi_ctl->dst_node_type],
> - hpi_ctl->dst_node_index,
> - dir, name);
> + scnprintf(hpi_ctl->name, sizeof(hpi_ctl->name),
> + "%s %d %s%s",
> + asihpi_dst_names[hpi_ctl->dst_node_type],
> + hpi_ctl->dst_node_index,
> + dir, name);
> } else {
> - sprintf(hpi_ctl->name, "%s %d %s%s",
> - asihpi_src_names[hpi_ctl->src_node_type],
> - hpi_ctl->src_node_index,
> - dir, name);
> + scnprintf(hpi_ctl->name, sizeof(hpi_ctl->name),
> + "%s %d %s%s",
> + asihpi_src_names[hpi_ctl->src_node_type],
> + hpi_ctl->src_node_index,
> + dir, name);
> }
> }
>
> --
> 2.50.1 (Apple Git-155)
>
next prev parent reply other threads:[~2026-03-28 9:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260323070310.55878-1-pengpeng@iscas.ac.cn>
2026-03-27 23:48 ` [PATCH] ALSA: asihpi: use scnprintf() for control name formatting Pengpeng Hou
2026-03-28 9:52 ` Takashi Iwai [this message]
2026-03-28 10:28 ` [PATCH v3] ALSA: asihpi: detect truncated control names Pengpeng Hou
2026-03-28 13:14 ` Takashi Iwai
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=877bqwwaag.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=pengpeng@iscas.ac.cn \
--cc=perex@perex.cz \
--cc=tiwai@suse.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox