Hello Oliver Neukum,
The patch 823bd3433424: "cdc-ether: switch to common CDC parser" from
Sep 7, 2015, leads to the following static checker warning:
drivers/net/usb/cdc_ether.c:248 usbnet_generic_cdc_bind()
warn: variable dereferenced before check 'info->u' (see line 168)
drivers/net/usb/cdc_ether.c
160 info->u = header.usb_cdc_union_desc;
Assigned.
161 info->header = header.usb_cdc_header_desc;
162 info->ether = header.usb_cdc_ether_desc;
163 /* we need a master/control interface (what we're
164 * probed with) and a slave/data interface; union
165 * descriptors sort this all out.
166 */
167 info->control = usb_ifnum_to_if(dev->udev,
168 info->u->bMasterInterface0);
Patch adds dereference outside the check for NULL. And confusing
indenting as well.
169 info->data = usb_ifnum_to_if(dev->udev,
170 info->u->bSlaveInterface0);
171 if (!info->control || !info->data) {
172 dev_dbg(&intf->dev,
173 "master #%u/%p slave #%u/%p\n",
[ snip ]
240 /* Microsoft ActiveSync based and some regular RNDIS devices
lack the
241 * CDC descriptors, so we'll hard-wire the interfaces and not
check
242 * for descriptors.
243 *
244 * Some Android RNDIS devices have a CDC Union descriptor
pointing
245 * to non-existing interfaces. Ignore that and attempt the same
246 * hard-wired 0 and 1 interfaces.
247 */
248 if (rndis && (!info->u || android_rndis_quirk)) {
^^^^^^^
This check for NULL is too late.
249 info->control = usb_ifnum_to_if(dev->udev, 0);
250 info->data = usb_ifnum_to_if(dev->udev, 1);
251 if (!info->control || !info->data || info->control !=
intf) {
252 dev_dbg(&intf->dev,
253 "rndis: master #0/%p slave #1/%p\n",
254 info->control,
255 info->data);
256 goto bad_desc;
257 }
258
259 } else if (!info->header || !info->u || (!rndis &&
!info->ether)) {
regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html