greybus: es2: fix cport-count error handling
authorJohan Hovold <johan@hovoldconsulting.com>
Wed, 17 Feb 2016 18:30:40 +0000 (19:30 +0100)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 17 Feb 2016 23:16:42 +0000 (15:16 -0800)
Make sure to check for short transfers when retrieving the bridge cport
count.

Also clear the request buffer when allocating it.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/es2.c

index e39bd58..5ade51e 100644 (file)
@@ -861,7 +861,7 @@ static int apb_get_cport_count(struct usb_device *udev)
        int retval;
        __le16 *cport_count;
 
-       cport_count = kmalloc(sizeof(*cport_count), GFP_KERNEL);
+       cport_count = kzalloc(sizeof(*cport_count), GFP_KERNEL);
        if (!cport_count)
                return -ENOMEM;
 
@@ -870,9 +870,13 @@ static int apb_get_cport_count(struct usb_device *udev)
                                 USB_DIR_IN | USB_TYPE_VENDOR |
                                 USB_RECIP_INTERFACE, 0, 0, cport_count,
                                 sizeof(*cport_count), ES2_TIMEOUT);
-       if (retval < 0) {
+       if (retval != sizeof(*cport_count)) {
                dev_err(&udev->dev, "Cannot retrieve CPort count: %d\n",
                        retval);
+
+               if (retval >= 0)
+                       retval = -EIO;
+
                goto out;
        }