From: Takashi Iwai <tiwai@suse.de>
To: Thorsten Blum <thorsten.blum@linux.dev>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
Takashi Iwai <tiwai@suse.de>,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] ALSA: mixer_oss: Replace deprecated strcpy() with strscpy()
Date: Fri, 20 Jun 2025 10:08:25 +0200 [thread overview]
Message-ID: <87pleyx2bq.wl-tiwai@suse.de> (raw)
In-Reply-To: <DA7484EA-83F7-496A-AB9F-2370BBBC0883@linux.dev>
On Thu, 19 Jun 2025 14:50:04 +0200,
Thorsten Blum wrote:
>
> On 19. Jun 2025, at 00:49, Al Viro wrote:
> > On Thu, Jun 19, 2025 at 12:36:29AM +0200, Thorsten Blum wrote:
> >> strcpy() is deprecated; use strscpy() instead.
> >>
> >> No functional changes intended.
> >
> > Have you actually read the damn thing? Seriously, look at the uses
> > of 'str' downstream. The only thing it is ever passed to is strcmp().
> >
> > In other words, why do we need to copy it anywhere? What's wrong with
> > having char *str instead of that array and replacing strcpy() with
> > plain and simple pointer assignment?
>
> I read it, but didn't question whether copying was actually necessary.
>
> However, it looks like 'ptr->name' can originate from userland (via proc
> file - see the function comment), which could make using 'char *str'
> directly unsafe, unless I'm missing something.
>
> Something like this would skip one copy while keeping it safe:
>
> char tmp_str[64];
> char *str;
>
> strscpy(tmp_str, ptr->name);
> if (!strcmp(tmp_str, "Master"))
> str = "Mix";
> else if (!strcmp(tmp_str, "Master Mono"))
> str = "Mix Mono";
> else
> str = tmp_str;
Al is right, we should optimize it instead. As it's been already a
string copied to a kernel, and the string is certainly NUL-terminated,
hence there is no need to worry about using the pointer.
It'd be something like:
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -991,7 +991,7 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer,
struct slot *pslot;
struct snd_kcontrol *kctl;
struct snd_mixer_oss_slot *rslot;
- char str[64];
+ const char *str;
/* check if already assigned */
if (mixer->slots[ptr->oss_id].get_volume && ! replace_old)
@@ -1014,11 +1014,11 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer,
if (kctl->info(kctl, uinfo))
return 0;
- strcpy(str, ptr->name);
+ str = ptr->name;
if (!strcmp(str, "Master"))
- strcpy(str, "Mix");
- if (!strcmp(str, "Master Mono"))
- strcpy(str, "Mix Mono");
+ str = "Mix";
+ else if (!strcmp(str, "Master Mono"))
+ str = "Mix Mono";
slot.capture_item = 0;
if (!strcmp(uinfo->value.enumerated.name, str)) {
slot.present |= SNDRV_MIXER_OSS_PRESENT_CAPTURE;
thanks,
Takashi
next prev parent reply other threads:[~2025-06-20 8:08 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-18 22:36 [PATCH] ALSA: mixer_oss: Replace deprecated strcpy() with strscpy() Thorsten Blum
2025-06-18 22:49 ` Al Viro
2025-06-19 12:50 ` Thorsten Blum
2025-06-20 8:08 ` Takashi Iwai [this message]
2025-06-23 11:05 ` Thorsten Blum
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=87pleyx2bq.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=christophe.jaillet@wanadoo.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=thorsten.blum@linux.dev \
--cc=tiwai@suse.com \
--cc=viro@zeniv.linux.org.uk \
/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.