Unverified Commit dcb82900 authored by Thorsten Blum's avatar Thorsten Blum Committed by Mark Brown
Browse files

ASoC: codecs: Call strscpy() with correct size argument



In aw8xxxx_profile_info(), strscpy() is called with the length of the
source string "null" rather than the size of the destination buffer.

This is fine as long as the destination buffer is larger than the source
string, but we should still use the destination buffer size instead to
call strscpy() as intended. And since 'name' points to the fixed-size
buffer 'uinfo->value.enumerated.name', we can safely omit the size
argument and let strscpy() infer it using sizeof() and remove 'name'.

Signed-off-by: default avatarThorsten Blum <thorsten.blum@linux.dev>
Link: https://patch.msgid.link/20250810214144.1985-2-thorsten.blum@linux.dev


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent b11f2a97
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ static int aw87390_profile_info(struct snd_kcontrol *kcontrol,
{
	struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol);
	struct aw87390 *aw87390 = snd_soc_component_get_drvdata(codec);
	char *prof_name, *name;
	char *prof_name;
	int count, ret;

	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
@@ -194,17 +194,15 @@ static int aw87390_profile_info(struct snd_kcontrol *kcontrol,
	if (uinfo->value.enumerated.item >= count)
		uinfo->value.enumerated.item = count - 1;

	name = uinfo->value.enumerated.name;
	count = uinfo->value.enumerated.item;

	ret = aw87390_dev_get_prof_name(aw87390->aw_pa, count, &prof_name);
	if (ret) {
		strscpy(uinfo->value.enumerated.name, "null",
						strlen("null") + 1);
		strscpy(uinfo->value.enumerated.name, "null");
		return 0;
	}

	strscpy(name, prof_name, sizeof(uinfo->value.enumerated.name));
	strscpy(uinfo->value.enumerated.name, prof_name);

	return 0;
}
+2 −3
Original line number Diff line number Diff line
@@ -914,12 +914,11 @@ static int aw88081_profile_info(struct snd_kcontrol *kcontrol,

	ret = aw88081_dev_get_prof_name(aw88081->aw_pa, count, &prof_name);
	if (ret) {
		strscpy(uinfo->value.enumerated.name, "null",
						sizeof(uinfo->value.enumerated.name));
		strscpy(uinfo->value.enumerated.name, "null");
		return 0;
	}

	strscpy(uinfo->value.enumerated.name, prof_name, sizeof(uinfo->value.enumerated.name));
	strscpy(uinfo->value.enumerated.name, prof_name);

	return 0;
}
+3 −5
Original line number Diff line number Diff line
@@ -1478,7 +1478,7 @@ static int aw88166_profile_info(struct snd_kcontrol *kcontrol,
{
	struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol);
	struct aw88166 *aw88166 = snd_soc_component_get_drvdata(codec);
	char *prof_name, *name;
	char *prof_name;
	int count, ret;

	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
@@ -1495,17 +1495,15 @@ static int aw88166_profile_info(struct snd_kcontrol *kcontrol,
	if (uinfo->value.enumerated.item >= count)
		uinfo->value.enumerated.item = count - 1;

	name = uinfo->value.enumerated.name;
	count = uinfo->value.enumerated.item;

	ret = aw88166_dev_get_prof_name(aw88166->aw_pa, count, &prof_name);
	if (ret) {
		strscpy(uinfo->value.enumerated.name, "null",
						strlen("null") + 1);
		strscpy(uinfo->value.enumerated.name, "null");
		return 0;
	}

	strscpy(name, prof_name, sizeof(uinfo->value.enumerated.name));
	strscpy(uinfo->value.enumerated.name, prof_name);

	return 0;
}
+3 −5
Original line number Diff line number Diff line
@@ -819,7 +819,7 @@ static int aw88261_profile_info(struct snd_kcontrol *kcontrol,
{
	struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol);
	struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
	char *prof_name, *name;
	char *prof_name;
	int count, ret;

	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
@@ -836,17 +836,15 @@ static int aw88261_profile_info(struct snd_kcontrol *kcontrol,
	if (uinfo->value.enumerated.item >= count)
		uinfo->value.enumerated.item = count - 1;

	name = uinfo->value.enumerated.name;
	count = uinfo->value.enumerated.item;

	ret = aw88261_dev_get_prof_name(aw88261->aw_pa, count, &prof_name);
	if (ret) {
		strscpy(uinfo->value.enumerated.name, "null",
						strlen("null") + 1);
		strscpy(uinfo->value.enumerated.name, "null");
		return 0;
	}

	strscpy(name, prof_name, sizeof(uinfo->value.enumerated.name));
	strscpy(uinfo->value.enumerated.name, prof_name);

	return 0;
}
+3 −5
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ static int aw88395_profile_info(struct snd_kcontrol *kcontrol,
{
	struct snd_soc_component *codec = snd_soc_kcontrol_component(kcontrol);
	struct aw88395 *aw88395 = snd_soc_component_get_drvdata(codec);
	char *prof_name, *name;
	char *prof_name;
	int count, ret;

	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
@@ -192,17 +192,15 @@ static int aw88395_profile_info(struct snd_kcontrol *kcontrol,
	if (uinfo->value.enumerated.item >= count)
		uinfo->value.enumerated.item = count - 1;

	name = uinfo->value.enumerated.name;
	count = uinfo->value.enumerated.item;

	ret = aw88395_dev_get_prof_name(aw88395->aw_pa, count, &prof_name);
	if (ret) {
		strscpy(uinfo->value.enumerated.name, "null",
						strlen("null") + 1);
		strscpy(uinfo->value.enumerated.name, "null");
		return 0;
	}

	strscpy(name, prof_name, sizeof(uinfo->value.enumerated.name));
	strscpy(uinfo->value.enumerated.name, prof_name);

	return 0;
}
Loading