linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ALSA: mixer_oss: Replace deprecated strcpy() with strscpy()
@ 2025-06-18 22:36 Thorsten Blum
  2025-06-18 22:49 ` Al Viro
  0 siblings, 1 reply; 4+ messages in thread
From: Thorsten Blum @ 2025-06-18 22:36 UTC (permalink / raw)
  To: Jaroslav Kysela, Takashi Iwai, Al Viro, Christophe JAILLET
  Cc: Thorsten Blum, Takashi Iwai, linux-sound, linux-kernel

strcpy() is deprecated; use strscpy() instead.

No functional changes intended.

Link: https://github.com/KSPP/linux/issues/88
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
 sound/core/oss/mixer_oss.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
index 05fc8911479c..d3d993da3269 100644
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -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);
+		strscpy(str, ptr->name);
 		if (!strcmp(str, "Master"))
-			strcpy(str, "Mix");
+			strscpy(str, "Mix");
 		if (!strcmp(str, "Master Mono"))
-			strcpy(str, "Mix Mono");
+			strscpy(str, "Mix Mono");
 		slot.capture_item = 0;
 		if (!strcmp(uinfo->value.enumerated.name, str)) {
 			slot.present |= SNDRV_MIXER_OSS_PRESENT_CAPTURE;
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] ALSA: mixer_oss: Replace deprecated strcpy() with strscpy()
  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
  0 siblings, 1 reply; 4+ messages in thread
From: Al Viro @ 2025-06-18 22:49 UTC (permalink / raw)
  To: Thorsten Blum
  Cc: Jaroslav Kysela, Takashi Iwai, Christophe JAILLET, Takashi Iwai,
	linux-sound, linux-kernel

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?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ALSA: mixer_oss: Replace deprecated strcpy() with strscpy()
  2025-06-18 22:49 ` Al Viro
@ 2025-06-19 12:50   ` Thorsten Blum
  2025-06-20  8:08     ` Takashi Iwai
  0 siblings, 1 reply; 4+ messages in thread
From: Thorsten Blum @ 2025-06-19 12:50 UTC (permalink / raw)
  To: Al Viro
  Cc: Jaroslav Kysela, Takashi Iwai, Christophe JAILLET, Takashi Iwai,
	linux-sound, linux-kernel

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;

Thanks,
Thorsten


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ALSA: mixer_oss: Replace deprecated strcpy() with strscpy()
  2025-06-19 12:50   ` Thorsten Blum
@ 2025-06-20  8:08     ` Takashi Iwai
  0 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2025-06-20  8:08 UTC (permalink / raw)
  To: Thorsten Blum
  Cc: Al Viro, Jaroslav Kysela, Takashi Iwai, Christophe JAILLET,
	Takashi Iwai, linux-sound, linux-kernel

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-06-20  8:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).