[media] dib0700: Fix memory leak during initialization
authorJean Delvare <khali@linux-fr.org>
Tue, 13 Mar 2012 16:52:50 +0000 (13:52 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 19 Mar 2012 22:35:57 +0000 (19:35 -0300)
Reported by kmemleak.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/dib0700_core.c

index ae4f999930fa56ec3007da9dc5c0ed4edc7b9221..02290c60f72f295e8892dbbff0aa3cc89f4196c4 100644 (file)
@@ -679,6 +679,7 @@ static void dib0700_rc_urb_completion(struct urb *purb)
        deb_info("%s()\n", __func__);
        if (d->rc_dev == NULL) {
                /* This will occur if disable_rc_polling=1 */
+               kfree(purb->transfer_buffer);
                usb_free_urb(purb);
                return;
        }
@@ -687,6 +688,7 @@ static void dib0700_rc_urb_completion(struct urb *purb)
 
        if (purb->status < 0) {
                deb_info("discontinuing polling\n");
+               kfree(purb->transfer_buffer);
                usb_free_urb(purb);
                return;
        }
@@ -781,8 +783,11 @@ int dib0700_rc_setup(struct dvb_usb_device *d)
                          dib0700_rc_urb_completion, d);
 
        ret = usb_submit_urb(purb, GFP_ATOMIC);
-       if (ret)
+       if (ret) {
                err("rc submit urb failed\n");
+               kfree(purb->transfer_buffer);
+               usb_free_urb(purb);
+       }
 
        return ret;
 }