svn commit: r295529 - in head/sys: net netinet netinet6

Devin Teske dteske at FreeBSD.org
Thu Feb 11 17:07:20 UTC 2016


Author: dteske
Date: Thu Feb 11 17:07:19 2016
New Revision: 295529
URL: https://svnweb.freebsd.org/changeset/base/295529

Log:
  Merge SVN r295220 (bz) from projects/vnet/
  
  Fix a panic that occurs when a vnet interface is unavailable at the time the
  vnet jail referencing said interface is stopped.
  
  Sponsored by:	FIS Global, Inc.

Modified:
  head/sys/net/route.c
  head/sys/netinet/in_rmx.c
  head/sys/netinet6/in6_rmx.c
Directory Properties:
  head/   (props changed)
  head/sys/   (props changed)

Modified: head/sys/net/route.c
==============================================================================
--- head/sys/net/route.c	Thu Feb 11 16:54:23 2016	(r295528)
+++ head/sys/net/route.c	Thu Feb 11 17:07:19 2016	(r295529)
@@ -353,10 +353,24 @@ rt_table_init(int offset)
 	return (rh);
 }
 
+static int
+rt_freeentry(struct radix_node *rn, void *arg)
+{
+	struct radix_head * const rnh = arg;
+	struct radix_node *x;
+
+	x = (struct radix_node *)rn_delete(rn + 2, NULL, rnh);
+	if (x != NULL)
+		R_Free(x);
+	return (0);
+}
+
 void
 rt_table_destroy(struct rib_head *rh)
 {
 
+	rn_walktree(&rh->rmhead.head, rt_freeentry, &rh->rmhead.head);
+
 	/* Assume table is already empty */
 	rw_destroy(&rh->rib_lock);
 	free(rh, M_RTABLE);

Modified: head/sys/netinet/in_rmx.c
==============================================================================
--- head/sys/netinet/in_rmx.c	Thu Feb 11 16:54:23 2016	(r295528)
+++ head/sys/netinet/in_rmx.c	Thu Feb 11 17:07:19 2016	(r295529)
@@ -133,7 +133,8 @@ int
 in_detachhead(void **head, int off)
 {
 
-	return (rn_detachhead(head));
+	rt_table_destroy((struct rib_head *)(*head));
+	return (1);
 }
 #endif
 

Modified: head/sys/netinet6/in6_rmx.c
==============================================================================
--- head/sys/netinet6/in6_rmx.c	Thu Feb 11 16:54:23 2016	(r295528)
+++ head/sys/netinet6/in6_rmx.c	Thu Feb 11 17:07:19 2016	(r295529)
@@ -237,7 +237,9 @@ in6_detachhead(void **head, int off)
 {
 
 	callout_drain(&V_rtq_mtutimer);
-	return (rn_detachhead(head));
+	rt_table_destroy((struct rib_head *)(*head));
+
+	return (1);
 }
 #endif
 


More information about the svn-src-head mailing list