kern/78072: [Patch] Potential memory leak in lge(4)
Antoine Brodin
antoine.brodin at laposte.net
Fri Feb 25 14:30:19 GMT 2005
>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 at 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:
More information about the freebsd-bugs
mailing list