From: Takashi Iwai Date: Sat, 9 Nov 2019 18:16:58 +0000 (+0100) Subject: ALSA: usb-audio: Fix missing error check at mixer resolution test X-Git-Tag: v3.16.80~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3e0d5bbb04cebc616ca79fd96dc4ed74064d3e87;p=thirdparty%2Fkernel%2Fstable.git ALSA: usb-audio: Fix missing error check at mixer resolution test 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 Link: https://lore.kernel.org/r/20191109181658.30368-1-tiwai@suse.de Signed-off-by: Takashi Iwai Signed-off-by: Ben Hutchings --- diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 158c84b791039..68774e172a66c 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c @@ -1014,7 +1014,8 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval, 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) @@ -1034,6 +1035,7 @@ static int get_min_max_with_quirks(struct usb_mixer_elem_info *cval, set_cur_mix_value(cval, minchn, 0, saved); } +no_res_check: cval->initialized = 1; }