ALSA: usb: Fix UBSAN warning in parse_audio_unit()
[ Upstream commit 2f38cf730caedaeacdefb7ff35b0a3c1168117f9 ] 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
d41fcaa12a
commit
8f9e9c8d08
1 changed files with 7 additions and 0 deletions
|
|
@ -1906,6 +1906,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…
Add table
Reference in a new issue