ASoC: ops: Fix bounds check for _sx controls

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: 4f1e50d6a9 ("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>
This commit is contained in:
Mark Brown 2022-05-11 14:41:36 +01:00
parent b776c4a461
commit 698813ba8c
No known key found for this signature in database
GPG key ID: 24D68B725D5487D0

View file

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