[alsa-devel] [bug report] ALSA: usb: initial USB Audio Device Class 3.0 support
Dan Carpenter
dan.carpenter at oracle.com
Fri Oct 12 15:51:23 CEST 2018
On Fri, Oct 12, 2018 at 04:48:23PM +0300, Dan Carpenter wrote:
> 966 /*
> 967 * Second step: allocate needed amount of memory
> 968 * and request Cluster Descriptor
> 969 */
> 970 wLength = le16_to_cpu(hc_header.wLength);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> My private build of Smatch complains that all le16_to_cpu() data
> probably comes from untrusted sources.
>
> 971 cluster = kzalloc(wLength, GFP_KERNEL);
> ^^^^^^^
> Maybe we're not allocating enough bytes for the cluster struct (8 bytes).
>
> 972 if (!cluster)
> 973 return ERR_PTR(-ENOMEM);
> 974 err = snd_usb_ctl_msg(chip->dev,
> 975 usb_rcvctrlpipe(chip->dev, 0),
> 976 UAC3_CS_REQ_HIGH_CAPABILITY_DESCRIPTOR,
> 977 USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN,
> 978 cluster_id,
> 979 snd_usb_ctrl_intf(chip),
> 980 cluster, wLength);
^^^^^^^
Also I just wanted to note as well that cluser->wLength is set by the
USB device here and we don't have a good reason to assume it's valid.
> 981 if (err < 0) {
> 982 kfree(cluster);
> 983 return ERR_PTR(err);
> 984 } else if (err != wLength) {
> 985 dev_err(&dev->dev,
> 986 "%u:%d : can't get Cluster Descriptor\n",
> 987 iface_no, altno);
> 988 kfree(cluster);
> 989 return ERR_PTR(-EIO);
> 990 }
> 991
> 992 num_channels = cluster->bNrChannels;
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 993 chmap = convert_chmap_v3(cluster);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
But we trust it in convert_chmap_v3() so that's a second potential out
of bounds.
regards,
dan carpenter
More information about the Alsa-devel
mailing list