| From 167beb1756791e0806365a3f86a0da10d7a327ee Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Sat, 9 Nov 2019 19:16:58 +0100 |
| Subject: ALSA: usb-audio: Fix missing error check at mixer resolution test |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit 167beb1756791e0806365a3f86a0da10d7a327ee upstream. |
| |
| A check of the return value from get_cur_mix_raw() is missing at the |
| resolution test code in get_min_max_with_quirks(), which may leave the |
| variable untouched, leading to a random uninitialized value, as |
| detected by syzkaller fuzzer. |
| |
| Add the missing return error check for fixing that. |
| |
| Reported-and-tested-by: syzbot+abe1ab7afc62c6bb6377@syzkaller.appspotmail.com |
| Cc: <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20191109181658.30368-1-tiwai@suse.de |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/usb/mixer.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/sound/usb/mixer.c |
| +++ b/sound/usb/mixer.c |
| @@ -1244,7 +1244,8 @@ static int get_min_max_with_quirks(struc |
| if (cval->min + cval->res < cval->max) { |
| int last_valid_res = cval->res; |
| int saved, test, check; |
| - get_cur_mix_raw(cval, minchn, &saved); |
| + if (get_cur_mix_raw(cval, minchn, &saved) < 0) |
| + goto no_res_check; |
| for (;;) { |
| test = saved; |
| if (test < cval->max) |
| @@ -1264,6 +1265,7 @@ static int get_min_max_with_quirks(struc |
| snd_usb_set_cur_mix_value(cval, minchn, 0, saved); |
| } |
| |
| +no_res_check: |
| cval->initialized = 1; |
| } |
| |