Skip to content

Commit

Permalink
ALSA: vmaster: Return error for invalid input values
Browse files Browse the repository at this point in the history
So far the vmaster code has been tolerant about the input values and
accepts any values by correcting internally.  But now our own selftest
starts complaining about this behavior, so let's be picky and change
the behavior to return -EINVAL for invalid input values instead.

Reported-by: Paul Menzel <pmenzel@molgen.mpg.de>
Closes: https://lore.kernel.org/r/1d44be36-9bb9-4d82-8953-5ae2a4f09405@molgen.mpg.de
Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/20240616073454.16512-2-tiwai@suse.de
  • Loading branch information
Takashi Iwai committed Jun 18, 2024
1 parent eb882af commit 10457f5
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions sound/core/vmaster.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,12 @@ static int follower_put(struct snd_kcontrol *kcontrol,
err = follower_init(follower);
if (err < 0)
return err;
for (ch = 0; ch < follower->info.count; ch++) {
if (ucontrol->value.integer.value[ch] < follower->info.min_val ||
ucontrol->value.integer.value[ch] > follower->info.max_val)
return -EINVAL;
}

for (ch = 0; ch < follower->info.count; ch++) {
if (follower->vals[ch] != ucontrol->value.integer.value[ch]) {
changed = 1;
Expand Down Expand Up @@ -365,6 +371,8 @@ static int master_put(struct snd_kcontrol *kcontrol,
new_val = ucontrol->value.integer.value[0];
if (new_val == old_val)
return 0;
if (new_val < master->info.min_val || new_val > master->info.max_val)
return -EINVAL;

err = sync_followers(master, old_val, new_val);
if (err < 0)
Expand Down

0 comments on commit 10457f5

Please sign in to comment.