]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: codecs: simple-mux: Fix enum control bounds check
authorCássio Gabriel <cassiogabrielcontato@gmail.com>
Wed, 27 May 2026 12:24:00 +0000 (09:24 -0300)
committerMark Brown <broonie@kernel.org>
Wed, 27 May 2026 12:43:20 +0000 (13:43 +0100)
simple_mux_control_put() rejects values greater than e->items, but
enum control values are zero based. For the two-entry mux used by this
driver, valid values are 0 and 1, so value 2 must be rejected as well.

Accepting e->items can store an invalid mux state, pass it to the GPIO
setter, and pass it on to the DAPM mux update path where it is used as
an index into the enum text array.

Use the same >= e->items check used by the ASoC enum helpers.

Fixes: 342fbb7578d1 ("ASoC: add simple-mux")
Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Link: https://patch.msgid.link/20260527-asoc-simple-mux-enum-bounds-v1-1-3f805b9fc671@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/simple-mux.c

index 069555f35f7359c599d4ecca3b6c31abe0ccf89b..c2f906a3f074ce2e7eb46f5af033865fe6693737 100644 (file)
@@ -51,7 +51,7 @@ static int simple_mux_control_put(struct snd_kcontrol *kcontrol,
        struct snd_soc_component *c = snd_soc_dapm_to_component(dapm);
        struct simple_mux *priv = snd_soc_component_get_drvdata(c);
 
-       if (ucontrol->value.enumerated.item[0] > e->items)
+       if (ucontrol->value.enumerated.item[0] >= e->items)
                return -EINVAL;
 
        if (priv->mux == ucontrol->value.enumerated.item[0])