svn commit: r355941 - head/sys/dev/mii

Mark Johnston markj at FreeBSD.org
Fri Dec 20 20:10:27 UTC 2019


Author: markj
Date: Fri Dec 20 20:10:26 2019
New Revision: 355941
URL: https://svnweb.freebsd.org/changeset/base/355941

Log:
  mii(4): Fix ivars leak when the bus device or bus children detach.
  
  PR:		242727
  Submitted by:	ghuckriede at blackberry.com
  MFC after:	1 week

Modified:
  head/sys/dev/mii/mii.c

Modified: head/sys/dev/mii/mii.c
==============================================================================
--- head/sys/dev/mii/mii.c	Fri Dec 20 19:53:05 2019	(r355940)
+++ head/sys/dev/mii/mii.c	Fri Dec 20 20:10:26 2019	(r355941)
@@ -60,6 +60,7 @@ MODULE_VERSION(miibus, 1);
 #include "miibus_if.h"
 
 static device_attach_t miibus_attach;
+static bus_child_detached_t miibus_child_detached;
 static bus_child_location_str_t miibus_child_location_str;
 static bus_child_pnpinfo_str_t miibus_child_pnpinfo_str;
 static device_detach_t miibus_detach;
@@ -85,6 +86,7 @@ static device_method_t miibus_methods[] = {
 	/* bus interface */
 	DEVMETHOD(bus_print_child,	miibus_print_child),
 	DEVMETHOD(bus_read_ivar,	miibus_read_ivar),
+	DEVMETHOD(bus_child_detached,	miibus_child_detached),
 	DEVMETHOD(bus_child_pnpinfo_str, miibus_child_pnpinfo_str),
 	DEVMETHOD(bus_child_location_str, miibus_child_location_str),
 	DEVMETHOD(bus_hinted_child,	miibus_hinted_child),
@@ -160,13 +162,25 @@ static int
 miibus_detach(device_t dev)
 {
 	struct mii_data		*mii;
+	struct miibus_ivars	*ivars;
 
+	ivars = device_get_ivars(dev);
 	bus_generic_detach(dev);
 	mii = device_get_softc(dev);
 	ifmedia_removeall(&mii->mii_media);
+	free(ivars, M_DEVBUF);
 	mii->mii_ifp = NULL;
 
 	return (0);
+}
+
+static void
+miibus_child_detached(device_t dev, device_t child)
+{
+	struct mii_attach_args *args;
+
+	args = device_get_ivars(child);
+	free(args, M_DEVBUF);
 }
 
 static int


More information about the svn-src-head mailing list