ASoC: ops: Fix bounds check for _sx controls
authorMark Brown <broonie@kernel.org>
Wed, 11 May 2022 13:41:36 +0000 (14:41 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 12 May 2022 10:41:21 +0000 (11:41 +0100)
For _sx controls the semantics of the max field is not the usual one, max
is the number of steps rather than the maximum value. This means that our
check in snd_soc_put_volsw_sx() needs to just check against the maximum
value.

Fixes: 4f1e50d6a9cf9c1b ("ASoC: ops: Reject out of bounds values in snd_soc_put_volsw_sx()")
Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20220511134137.169575-1-broonie@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-ops.c

index e693070f51fe8113dd5a6d57c378ccb7d460e302..1ac7e2ce31a1855c8219050d0c638833d76cb483 100644 (file)
@@ -435,7 +435,7 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,
        val = ucontrol->value.integer.value[0];
        if (mc->platform_max && val > mc->platform_max)
                return -EINVAL;
-       if (val > max - min)
+       if (val > max)
                return -EINVAL;
        val_mask = mask << shift;
        val = (val + min) & mask;