mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
ALSA: usb: Fix UBSAN warning in parse_audio_unit()
[ Upstream commit 2f38cf730c
]
A malformed USB descriptor may pass the lengthy mixer description with
a lot of channels, and this may overflow the 32bit integer shift
size, as caught by syzbot UBSAN test. Although this won't cause any
real trouble, it's better to address.
This patch introduces a sanity check of the number of channels to bail
out the parsing when too many channels are found.
Reported-by: syzbot+78d5b129a762182225aa@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/0000000000000adac5061d3c7355@google.com
Link: https://patch.msgid.link/20240715123619.26612-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
5472b587cf
commit
f95d175a9e
@ -2021,6 +2021,13 @@ static int parse_audio_feature_unit(struct mixer_build *state, int unitid,
|
||||
bmaControls = ftr->bmaControls;
|
||||
}
|
||||
|
||||
if (channels > 32) {
|
||||
usb_audio_info(state->chip,
|
||||
"usbmixer: too many channels (%d) in unit %d\n",
|
||||
channels, unitid);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* parse the source unit */
|
||||
err = parse_audio_unit(state, hdr->bSourceID);
|
||||
if (err < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user