]> www.infradead.org Git - users/hch/configfs.git/commitdiff
ALSA: vmaster: Return error for invalid input values
authorTakashi Iwai <tiwai@suse.de>
Sun, 16 Jun 2024 07:34:42 +0000 (09:34 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 18 Jun 2024 10:00:18 +0000 (12:00 +0200)
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
sound/core/vmaster.c

index 04a57f7be6ea42ae2891b70cf85f0b7048389665..c657659b236c4245077afe0479dd6b10f6892456 100644 (file)
@@ -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;
@@ -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)