carl9170: fix leaks at failure path in carl9170_usb_probe()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Sat, 28 Sep 2013 03:51:51 +0000 (23:51 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 22 May 2014 18:04:36 +0000 (14:04 -0400)
carl9170_usb_probe() does not handle request_firmware_nowait() failure
that leads to several leaks in this case.
The patch adds all required deallocations.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/carl9170/usb.c

index ca115f33746f228bc4f9007e0397b567f644e2a8..f35c7f30f9a6f66f234a4816260d0ea473fc573e 100644 (file)
@@ -1076,8 +1076,14 @@ static int carl9170_usb_probe(struct usb_interface *intf,
 
        carl9170_set_state(ar, CARL9170_STOPPED);
 
-       return request_firmware_nowait(THIS_MODULE, 1, CARL9170FW_NAME,
+       err = request_firmware_nowait(THIS_MODULE, 1, CARL9170FW_NAME,
                &ar->udev->dev, GFP_KERNEL, ar, carl9170_usb_firmware_step2);
+       if (err) {
+               usb_put_dev(udev);
+               usb_put_dev(udev);
+               carl9170_free(ar);
+       }
+       return err;
 }
 
 static void carl9170_usb_disconnect(struct usb_interface *intf)