diff options
author | dteske <dteske@FreeBSD.org> | 2016-02-11 17:07:19 +0000 |
---|---|---|
committer | dteske <dteske@FreeBSD.org> | 2016-02-11 17:07:19 +0000 |
commit | 51b30e8967e6d3ca63e740b2ffa317c7179fbdee (patch) | |
tree | cce460a0a632676f5ec27d9f4d6eb3ef6b20c66c /sys/net | |
parent | 0d45ed6f45ba3b645811c9a96a7d5e4d53d91bcd (diff) | |
download | FreeBSD-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.c | 14 |
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); |