diff options
author | Garrett Wollman <wollman@FreeBSD.org> | 1995-03-21 19:50:34 +0000 |
---|---|---|
committer | Garrett Wollman <wollman@FreeBSD.org> | 1995-03-21 19:50:34 +0000 |
commit | 771edb14e9a0f9a14f9780a840c569fe0ac9791a (patch) | |
tree | 85daefc021765953a02df5e9bac370e07518b113 /sys/net/route.c | |
parent | 8516cd0fa5d299befb3e7a9a153cf5d849b76a7f (diff) | |
download | src-771edb14e9a0f9a14f9780a840c569fe0ac9791a.tar.gz src-771edb14e9a0f9a14f9780a840c569fe0ac9791a.zip |
Protocol-cloned routes should gain a reference to their parents to make
sure that rt->rt_parent values can never be re-used harmfully.
Notes
Notes:
svn path=/head/; revision=7224
Diffstat (limited to 'sys/net/route.c')
-rw-r--r-- | sys/net/route.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/net/route.c b/sys/net/route.c index 98d228f233c7..9cd58c97437f 100644 --- a/sys/net/route.c +++ b/sys/net/route.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)route.c 8.2 (Berkeley) 11/15/93 - * $Id: route.c,v 1.17 1995/03/20 21:30:18 wollman Exp $ + * $Id: route.c,v 1.18 1995/03/20 23:00:57 davidg Exp $ */ #include <sys/param.h> @@ -166,6 +166,9 @@ rtfree(rt) } ifa = rt->rt_ifa; IFAFREE(ifa); + if (rt->rt_parent) { + RTFREE(rt->rt_parent); + } Free(rt_key(rt)); Free(rt); } @@ -445,10 +448,14 @@ rtrequest(req, dst, gateway, netmask, flags, ret_nrt) ifa->ifa_refcnt++; rt->rt_ifa = ifa; rt->rt_ifp = ifa->ifa_ifp; + rt->rt_parent = 0; + if (req == RTM_RESOLVE) { rt->rt_rmx = (*ret_nrt)->rt_rmx; /* copy metrics */ - if ((*ret_nrt)->rt_flags & RTF_PRCLONING) + if ((*ret_nrt)->rt_flags & RTF_PRCLONING) { rt->rt_parent = (*ret_nrt); + (*ret_nrt)->rt_refcnt++; + } } if (ifa->ifa_rtrequest) ifa->ifa_rtrequest(req, rt, SA(ret_nrt ? *ret_nrt : 0)); |