From patchwork Sun Jan 2 20:57:24 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesper Juhl X-Patchwork-Id: 446541 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p02L8D6c008259 for ; Sun, 2 Jan 2011 21:08:32 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753782Ab1ABU51 (ORCPT ); Sun, 2 Jan 2011 15:57:27 -0500 Received: from swampdragon.chaosbits.net ([90.184.90.115]:10937 "EHLO swampdragon.chaosbits.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751192Ab1ABU50 (ORCPT ); Sun, 2 Jan 2011 15:57:26 -0500 Received: by swampdragon.chaosbits.net (Postfix, from userid 1000) id C49769403D; Sun, 2 Jan 2011 21:57:24 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by swampdragon.chaosbits.net (Postfix) with ESMTP id BCB3A9403B; Sun, 2 Jan 2011 21:57:24 +0100 (CET) Date: Sun, 2 Jan 2011 21:57:24 +0100 (CET) From: Jesper Juhl To: linux-media@vger.kernel.org cc: Huang Shijie , Kang Yong , Zhang Xiaobing , Mauro Carvalho Chehab , linux-kernel@vger.kernel.org Subject: [PATCH] media, tlg2300: Fix memory leak in alloc_bulk_urbs_generic() Message-ID: User-Agent: Alpine 2.00 (LNX 1167 2008-08-23) MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Sun, 02 Jan 2011 21:08:33 +0000 (UTC) diff --git a/drivers/media/video/tlg2300/pd-video.c b/drivers/media/video/tlg2300/pd-video.c index a1ffe18..df33a1d 100644 --- a/drivers/media/video/tlg2300/pd-video.c +++ b/drivers/media/video/tlg2300/pd-video.c @@ -512,19 +512,20 @@ int alloc_bulk_urbs_generic(struct urb **urb_array, int num, int buf_size, gfp_t gfp_flags, usb_complete_t complete_fn, void *context) { - struct urb *urb; - void *mem; - int i; + int i = 0; - for (i = 0; i < num; i++) { - urb = usb_alloc_urb(0, gfp_flags); + for (; i < num; i++) { + void *mem; + struct urb *urb = usb_alloc_urb(0, gfp_flags); if (urb == NULL) return i; mem = usb_alloc_coherent(udev, buf_size, gfp_flags, &urb->transfer_dma); - if (mem == NULL) + if (mem == NULL) { + usb_free_urb(urb); return i; + } usb_fill_bulk_urb(urb, udev, usb_rcvbulkpipe(udev, ep_addr), mem, buf_size, complete_fn, context);