From owner-freebsd-bugs@FreeBSD.ORG Fri Feb 25 14:30:18 2005 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id BC3A616A4CE for ; Fri, 25 Feb 2005 14:30:18 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6DBE743D58 for ; Fri, 25 Feb 2005 14:30:18 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.1/8.13.1) with ESMTP id j1PEUIoP076221 for ; Fri, 25 Feb 2005 14:30:18 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.1/8.13.1/Submit) id j1PEUINo076216; Fri, 25 Feb 2005 14:30:18 GMT (envelope-from gnats) Resent-Date: Fri, 25 Feb 2005 14:30:18 GMT Resent-Message-Id: <200502251430.j1PEUINo076216@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Antoine Brodin Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8FEB916A4CE for ; Fri, 25 Feb 2005 14:27:32 +0000 (GMT) Received: from barton.dreadbsd.org (massena-4-82-67-196-50.fbx.proxad.net [82.67.196.50]) by mx1.FreeBSD.org (Postfix) with ESMTP id B734A43D76 for ; Fri, 25 Feb 2005 14:27:31 +0000 (GMT) (envelope-from antoine@massena-4-82-67-196-50.fbx.proxad.net) Received: from barton.dreadbsd.org (localhost [127.0.0.1]) by barton.dreadbsd.org (8.13.3/8.13.1) with ESMTP id j1PERSss019222 for ; Fri, 25 Feb 2005 15:27:31 +0100 (CET) (envelope-from antoine@massena-4-82-67-196-50.fbx.proxad.net) Received: (from antoine@localhost) by barton.dreadbsd.org (8.13.3/8.13.1/Submit) id j1PERRxm019221; Fri, 25 Feb 2005 15:27:27 +0100 (CET) (envelope-from antoine) Message-Id: <200502251427.j1PERRxm019221@barton.dreadbsd.org> Date: Fri, 25 Feb 2005 15:27:27 +0100 (CET) From: Antoine Brodin To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: kern/78072: [Patch] Potential memory leak in lge(4) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Antoine Brodin List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Feb 2005 14:30:19 -0000 >Number: 78072 >Category: kern >Synopsis: [Patch] Potential memory leak in lge(4) >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Feb 25 14:30:17 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Antoine Brodin >Release: FreeBSD 6.0-CURRENT i386 >Organization: none >Environment: System: FreeBSD barton.dreadbsd.org 6.0-CURRENT FreeBSD 6.0-CURRENT #0: Thu Feb 24 14:18:22 CET 2005 antoine@barton.dreadbsd.org:/usr/obj/usr/src/sys/BARTON i386 >Description: If malloc(9) fails line 791 of if_lge.c, the jumbo buffer block and the free jumbo list entries already allocated will be leaked. >How-To-Repeat: I haven't got any lge(4) NIC. >Fix: Patch attached: --- if_lge.diff begins here --- Index: dev/lge/if_lge.c =================================================================== RCS file: /home/ncvs/src/sys/dev/lge/if_lge.c,v retrieving revision 1.36 diff -u -p -r1.36 if_lge.c --- dev/lge/if_lge.c 6 Jan 2005 01:42:53 -0000 1.36 +++ dev/lge/if_lge.c 25 Feb 2005 12:24:46 -0000 @@ -791,6 +791,7 @@ lge_alloc_jumbo_mem(sc) entry = malloc(sizeof(struct lge_jpool_entry), M_DEVBUF, M_NOWAIT); if (entry == NULL) { + lge_free_jumbo_mem(sc); printf("lge%d: no memory for jumbo " "buffer queue!\n", sc->lge_unit); return(ENOBUFS); @@ -807,10 +808,9 @@ static void lge_free_jumbo_mem(sc) struct lge_softc *sc; { - int i; struct lge_jpool_entry *entry; - for (i = 0; i < LGE_JSLOTS; i++) { + while (!SLIST_EMPTY(&sc->lge_jfree_listhead)) { entry = SLIST_FIRST(&sc->lge_jfree_listhead); SLIST_REMOVE_HEAD(&sc->lge_jfree_listhead, jpool_entries); free(entry, M_DEVBUF); --- if_lge.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: