Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69128316 authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Mark Brown
Browse files

ASoC: dapm: Fix uninitialized variable in snd_soc_dapm_get_enum_double()



If soc_dapm_read() fails, reg_val will be uninitialized, and bogus
values will be written later:

sound/soc/soc-dapm.c: In function 'snd_soc_dapm_get_enum_double':
sound/soc/soc-dapm.c:2862:15: warning: 'reg_val' may be used uninitialized in this function [-Wmaybe-uninitialized]
  unsigned int reg_val, val;
               ^

Return early on error to fix this.

Introduced by commit ce0fc93a ("ASoC:
Add DAPM support at the component level").

Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
Acked-by: default avatarLars-Peter Clausen <lars@metafoo.de>
parent ae34a78c
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -2860,12 +2860,14 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
	struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol);
	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
	unsigned int reg_val, val;
	int ret = 0;

	if (e->reg != SND_SOC_NOPM)
		ret = soc_dapm_read(dapm, e->reg, &reg_val);
	else
	if (e->reg != SND_SOC_NOPM) {
		int ret = soc_dapm_read(dapm, e->reg, &reg_val);
		if (ret)
			return ret;
	} else {
		reg_val = dapm_kcontrol_get_value(kcontrol);
	}

	val = (reg_val >> e->shift_l) & e->mask;
	ucontrol->value.enumerated.item[0] = snd_soc_enum_val_to_item(e, val);
@@ -2875,7 +2877,7 @@ int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
		ucontrol->value.enumerated.item[1] = val;
	}

	return ret;
	return 0;
}
EXPORT_SYMBOL_GPL(snd_soc_dapm_get_enum_double);