USB: usbtmc: add missing endpoint sanity check
[pandora-kernel.git] / drivers / usb / class / usbtmc.c
index 12cf5e7..e9ef9af 100644 (file)
@@ -1007,7 +1007,7 @@ static int usbtmc_probe(struct usb_interface *intf,
 
        dev_dbg(&intf->dev, "%s called\n", __func__);
 
-       data = kmalloc(sizeof(struct usbtmc_device_data), GFP_KERNEL);
+       data = kzalloc(sizeof(struct usbtmc_device_data), GFP_KERNEL);
        if (!data) {
                dev_err(&intf->dev, "Unable to allocate kernel memory\n");
                return -ENOMEM;
@@ -1053,6 +1053,12 @@ static int usbtmc_probe(struct usb_interface *intf,
                }
        }
 
+       if (!data->bulk_out || !data->bulk_in) {
+               dev_err(&intf->dev, "bulk endpoints not found\n");
+               retcode = -ENODEV;
+               goto err_put;
+       }
+
        retcode = get_capabilities(data);
        if (retcode)
                dev_err(&intf->dev, "can't read capabilities\n");
@@ -1076,6 +1082,7 @@ static int usbtmc_probe(struct usb_interface *intf,
 error_register:
        sysfs_remove_group(&intf->dev.kobj, &capability_attr_grp);
        sysfs_remove_group(&intf->dev.kobj, &data_attr_grp);
+err_put:
        kref_put(&data->kref, usbtmc_delete);
        return retcode;
 }