Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Nov 2004 16:44:57 -0500
From:      John Baldwin <jhb@FreeBSD.org>
To:        freebsd-current@FreeBSD.org
Cc:        FreeBSD current mailing list <current@FreeBSD.org>
Subject:   Re: mem leak in mii ?
Message-ID:  <200411221644.57047.jhb@FreeBSD.org>
In-Reply-To: <Pine.BSF.4.53.0411192340590.42526@e0-0.zab2.int.zabbadoz.net>
References:  <Pine.BSF.4.53.0411192340590.42526@e0-0.zab2.int.zabbadoz.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 19 November 2004 06:49 pm, Bjoern A. Zeeb wrote:
> Hi,
>
> in sys/dev/mii/mii.c there are two calls to malloc for ivars;
> see for example mii_phy_probe:
>
>         v = malloc(sizeof(vm_offset_t) * 2, M_DEVBUF, M_NOWAIT);
>         if (v == 0) {
>                 return (ENOMEM);
>         }
>         v[0] = ifmedia_upd;
>         v[1] = ifmedia_sts;
>         *child = device_add_child(dev, "miibus", -1);
>         device_set_ivars(*child, v);
>
> Where is the free for this malloc ? I cannot find it.
>
> analogous: miibus_probe ?

It's a leak.  It should be free'd when the miibus device is destroyed.  Here's 
a possible fix:

Index: dev/mii/mii.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/mii/mii.c,v
retrieving revision 1.20
diff -u -r1.20 mii.c
--- dev/mii/mii.c	15 Aug 2004 06:24:40 -0000	1.20
+++ dev/mii/mii.c	22 Nov 2004 21:43:40 -0000
@@ -186,11 +186,15 @@
 	device_t		dev;
 {
 	struct mii_data		*mii;
+	void			**v;
 
 	bus_generic_detach(dev);
 	mii = device_get_softc(dev);
 	ifmedia_removeall(&mii->mii_media);
 	mii->mii_ifp = NULL;
+	v = device_get_ivars(dev);
+	device_set_ivars(dev, NULL);
+	free(v, M_DEVBUF);
 
 	return(0);
 }
@@ -325,6 +329,7 @@
 
 	if (i == MII_NPHY) {
 		device_delete_child(dev, *child);
+		free(v, M_DEVBUF);
 		*child = NULL;
 		return(ENXIO);
 	}


-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200411221644.57047.jhb>