]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/dvb/dvb-usb/usb-urb.c
V4L/DVB (9605): usb-urb: fix memory leak
[linux-2.6-omap-h63xx.git] / drivers / media / dvb / dvb-usb / usb-urb.c
index 397f51a7b2ada50abe6078540f6f37ae25edef85..da93b9e982c04e3c67dbc0db671d43ca313a41ee 100644 (file)
@@ -135,7 +135,7 @@ stream->buf_list[stream->buf_num], (long long)stream->dma_addr[stream->buf_num])
 
 static int usb_bulk_urb_init(struct usb_data_stream *stream)
 {
-       int i;
+       int i, j;
 
        if ((i = usb_allocate_stream_buffers(stream,stream->props.count,
                                        stream->props.u.bulk.buffersize)) < 0)
@@ -143,9 +143,13 @@ static int usb_bulk_urb_init(struct usb_data_stream *stream)
 
        /* allocate the URBs */
        for (i = 0; i < stream->props.count; i++) {
-               if ((stream->urb_list[i] = usb_alloc_urb(0,GFP_ATOMIC)) == NULL)
+               stream->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC);
+               if (!stream->urb_list[i]) {
+                       deb_mem("not enough memory for urb_alloc_urb!.\n");
+                       for (j = 0; j < i; j++)
+                               usb_free_urb(stream->urb_list[i]);
                        return -ENOMEM;
-
+               }
                usb_fill_bulk_urb( stream->urb_list[i], stream->udev,
                                usb_rcvbulkpipe(stream->udev,stream->props.endpoint),
                                stream->buf_list[i],
@@ -170,9 +174,14 @@ static int usb_isoc_urb_init(struct usb_data_stream *stream)
        for (i = 0; i < stream->props.count; i++) {
                struct urb *urb;
                int frame_offset = 0;
-               if ((stream->urb_list[i] =
-                                       usb_alloc_urb(stream->props.u.isoc.framesperurb,GFP_ATOMIC)) == NULL)
+
+               stream->urb_list[i] = usb_alloc_urb(stream->props.u.isoc.framesperurb, GFP_ATOMIC);
+               if (!stream->urb_list[i]) {
+                       deb_mem("not enough memory for urb_alloc_urb!\n");
+                       for (j = 0; j < i; j++)
+                               usb_free_urb(stream->urb_list[i]);
                        return -ENOMEM;
+               }
 
                urb = stream->urb_list[i];