diff options
author | pb <pb@FreeBSD.org> | 1999-06-25 13:43:30 +0000 |
---|---|---|
committer | pb <pb@FreeBSD.org> | 1999-06-25 13:43:30 +0000 |
commit | 5ed26c8f51820fc71578a9f1abc4fa06760f89d3 (patch) | |
tree | b58cd2c103b10b5a1f358dfde6ce1fe2caff507b /sys/net/radix.c | |
parent | 93ee80e2fd7ce70f607cb2c3402d9202e4ccd03f (diff) | |
download | FreeBSD-src-5ed26c8f51820fc71578a9f1abc4fa06760f89d3.zip FreeBSD-src-5ed26c8f51820fc71578a9f1abc4fa06760f89d3.tar.gz |
Never return the root node itself from rn_match(); return NULL instead.
This caused a panic in rtfreee() called with a root node from the
routing socket code (when processing a RTM_GET message looking for
the default route while there is none).
Since no existing code seems to have any use getting the root node
from rn_match(), it seems cleaner never to return it rather than
check for this condition at the caller's.
PR: kern/12265
Diffstat (limited to 'sys/net/radix.c')
-rw-r--r-- | sys/net/radix.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/net/radix.c b/sys/net/radix.c index bca5bdd..30608d8 100644 --- a/sys/net/radix.c +++ b/sys/net/radix.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)radix.c 8.4 (Berkeley) 11/2/94 - * $Id: radix.c,v 1.16 1999/04/26 09:05:31 peter Exp $ + * $Id: radix.c,v 1.17 1999/04/29 03:22:16 luoqi Exp $ */ /* @@ -260,8 +260,11 @@ rn_match(v_arg, head) /* * This extra grot is in case we are explicitly asked * to look up the default. Ugh! + * + * Never return the root node itself, it seems to cause a + * lot of confusion. */ - if ((t->rn_flags & RNF_ROOT) && t->rn_dupedkey) + if (t->rn_flags & RNF_ROOT) t = t->rn_dupedkey; return t; on1: |