rt2x00usb: check USB's request error code in rt2800usb_autorun_detect()
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Thu, 12 Mar 2015 14:35:45 +0000 (15:35 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 16 Mar 2015 16:06:01 +0000 (18:06 +0200)
rt2800usb_autorun_detect() blindly assumes assumes that it worked while
it could have failed. Check the error code here.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rt2x00/rt2800usb.c

index 8444313eabe2bbc1bdcb660c5a82bff17f3fdb90..e692e5fe4e019d2fd18ef7b41736a4ce6ea05697 100644 (file)
@@ -233,6 +233,7 @@ static int rt2800usb_autorun_detect(struct rt2x00_dev *rt2x00dev)
 {
        __le32 *reg;
        u32 fw_mode;
+       int ret;
 
        reg = kmalloc(sizeof(*reg), GFP_KERNEL);
        if (reg == NULL)
@@ -242,11 +243,14 @@ static int rt2800usb_autorun_detect(struct rt2x00_dev *rt2x00dev)
         * magic value USB_MODE_AUTORUN (0x11) to the device, thus the
         * returned value would be invalid.
         */
-       rt2x00usb_vendor_request(rt2x00dev, USB_DEVICE_MODE,
-                                USB_VENDOR_REQUEST_IN, 0, USB_MODE_AUTORUN,
-                                reg, sizeof(*reg), REGISTER_TIMEOUT_FIRMWARE);
+       ret = rt2x00usb_vendor_request(rt2x00dev, USB_DEVICE_MODE,
+                                      USB_VENDOR_REQUEST_IN, 0,
+                                      USB_MODE_AUTORUN, reg, sizeof(*reg),
+                                      REGISTER_TIMEOUT_FIRMWARE);
        fw_mode = le32_to_cpu(*reg);
        kfree(reg);
+       if (ret < 0)
+               return ret;
 
        if ((fw_mode & 0x00000003) == 2)
                return 1;