summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authordteske <dteske@FreeBSD.org>2016-02-11 17:07:19 +0000
committerdteske <dteske@FreeBSD.org>2016-02-11 17:07:19 +0000
commit51b30e8967e6d3ca63e740b2ffa317c7179fbdee (patch)
treecce460a0a632676f5ec27d9f4d6eb3ef6b20c66c /sys/net
parent0d45ed6f45ba3b645811c9a96a7d5e4d53d91bcd (diff)
downloadFreeBSD-src-51b30e8967e6d3ca63e740b2ffa317c7179fbdee.zip
FreeBSD-src-51b30e8967e6d3ca63e740b2ffa317c7179fbdee.tar.gz
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.
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/route.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/sys/net/route.c b/sys/net/route.c
index 8ad0e24..45f479c 100644
--- a/sys/net/route.c
+++ b/sys/net/route.c
@@ -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);
OpenPOWER on IntegriCloud