svn commit: r294070 - stable/10/sys/net

Ravi Pokala rpokala at FreeBSD.org
Fri Jan 15 04:05:57 UTC 2016


Author: rpokala
Date: Fri Jan 15 04:05:56 2016
New Revision: 294070
URL: https://svnweb.freebsd.org/changeset/base/294070

Log:
  [PR 206219] Kernel panic from lagg_ioctl and lagg_port_ioctl
  
  r287723 removed some cleanup from lagg(4), which leads to panics when
  changing configuration. Restore the spirit of the code which was removed.
  This issue has been refactored out of existence in -HEAD, so this patch is
  directly against stable/10.
  
  PR:		206219
  Submitted by:	Fred Lewis < flewis @ panasas.com >
  Reviewed by:	hiren, Daniel O'Connor < darius @ dons.net.au >
  Approved by:	jhb
  Sponsored by:	Panasas, Inc.
  Differential Revision:	https://reviews.freebsd.org/D4929

Modified:
  stable/10/sys/net/if_lagg.c

Modified: stable/10/sys/net/if_lagg.c
==============================================================================
--- stable/10/sys/net/if_lagg.c	Fri Jan 15 02:58:20 2016	(r294069)
+++ stable/10/sys/net/if_lagg.c	Fri Jan 15 04:05:56 2016	(r294070)
@@ -1058,9 +1058,25 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd
 		/* Set to LAGG_PROTO_NONE during the attach. */
 		LAGG_WLOCK(sc);
 		if (sc->sc_proto != LAGG_PROTO_NONE) {
+			int (*sc_detach)(struct lagg_softc *sc);
+
+			/* Reset protocol and pointers */
 			sc->sc_proto = LAGG_PROTO_NONE;
-			if (sc->sc_detach != NULL)
-				sc->sc_detach(sc);
+			sc_detach = sc->sc_detach;
+			sc->sc_detach = NULL;
+			sc->sc_start = NULL;
+			sc->sc_input = NULL;
+			sc->sc_port_create = NULL;
+			sc->sc_port_destroy = NULL;
+			sc->sc_linkstate = NULL;
+			sc->sc_init = NULL;
+			sc->sc_stop = NULL;
+			sc->sc_lladdr = NULL;
+			sc->sc_req = NULL;
+			sc->sc_portreq = NULL;
+
+			if (sc_detach != NULL)
+				sc_detach(sc);
 			else
 				LAGG_WUNLOCK(sc);
 		} else


More information about the svn-src-all mailing list