PERFORCE change 157932 for review

Marko Zec zec at FreeBSD.org
Thu Feb 19 05:53:12 PST 2009


http://perforce.freebsd.org/chv.cgi?CH=157932

Change 157932 by zec at zec_amdx2 on 2009/02/19 13:52:15

	Fix a panic when reassigning ifnet from one vnet to another.

Affected files ...

.. //depot/projects/vimage/src/sys/kern/kern_vimage.c#75 edit
.. //depot/projects/vimage/src/sys/net/if.c#66 edit
.. //depot/projects/vimage/src/sys/net/if_var.h#28 edit

Differences ...

==== //depot/projects/vimage/src/sys/kern/kern_vimage.c#75 (text+ko) ====

@@ -382,7 +382,8 @@
 
 		IFNET_WLOCK();
 		ifnet_setbyindex(ifp->if_index, NULL);
-		while (V_if_index > 0 && ifnet_byindex(V_if_index) == NULL)
+		while (V_if_index > 0 &&
+		    ifnet_byindex_locked(V_if_index) == NULL)
 			V_if_index--;
 		IFNET_WUNLOCK();
 	} while (0);
@@ -395,7 +396,7 @@
 	 */
 	IFNET_WLOCK();
 	for (ifp->if_index = 1; ifp->if_index <= V_if_index; ifp->if_index++) {
-		if (ifnet_byindex(ifp->if_index) == NULL)
+		if (ifnet_byindex_locked(ifp->if_index) == NULL)
 			break;
 	}
 	/* Catch if_index overflow. */

==== //depot/projects/vimage/src/sys/net/if.c#66 (text+ko) ====

@@ -216,7 +216,7 @@
 MALLOC_DEFINE(M_IFADDR, "ifaddr", "interface address");
 MALLOC_DEFINE(M_IFMADDR, "ether_multi", "link-level multicast address");
 
-static struct ifnet *
+struct ifnet *
 ifnet_byindex_locked(u_short idx)
 {
 	INIT_VNET_NET(curvnet);

==== //depot/projects/vimage/src/sys/net/if_var.h#28 (text+ko) ====

@@ -704,6 +704,7 @@
 
 void ifnet_setbyindex(u_short idx, struct ifnet *ifp);
 struct ifnet	*ifnet_byindex(u_short idx);
+struct ifnet	*ifnet_byindex_locked(u_short idx);
 
 /*
  * Given the index, ifaddr_byindex() returns the one and only


More information about the p4-projects mailing list