Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 May 2014 15:04:33 +0000 (UTC)
From:      "Alexander V. Chernikov" <melifaro@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r265196 - head/sys/net
Message-ID:  <201405011504.s41F4X0J099720@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: melifaro
Date: Thu May  1 15:04:32 2014
New Revision: 265196
URL: http://svnweb.freebsd.org/changeset/base/265196

Log:
  Fix rnh_walktree_from() function (patch from kern/174959).
  Require valid netmask to be passed since host route is always a leaf.
  
  PR:		kern/174959
  Submitted by:	Keith Sklower
  MFC after:	2 weeks

Modified:
  head/sys/net/radix.c

Modified: head/sys/net/radix.c
==============================================================================
--- head/sys/net/radix.c	Thu May  1 15:03:26 2014	(r265195)
+++ head/sys/net/radix.c	Thu May  1 15:04:32 2014	(r265196)
@@ -971,6 +971,8 @@ rn_walktree_from(struct radix_node_head 
 	int stopping = 0;
 	int lastb;
 
+	KASSERT(m != NULL, ("%s: mask needs to be specified", __func__));
+
 	/*
 	 * rn_search_m is sort-of-open-coded here. We cannot use the
 	 * function because we need to keep track of the last node seen.
@@ -994,11 +996,11 @@ rn_walktree_from(struct radix_node_head 
 	/*
 	 * Two cases: either we stepped off the end of our mask,
 	 * in which case last == rn, or we reached a leaf, in which
-	 * case we want to start from the last node we looked at.
-	 * Either way, last is the node we want to start from.
+	 * case we want to start from the leaf.
 	 */
-	rn = last;
-	lastb = rn->rn_bit;
+	if (rn->rn_bit >= 0)
+		rn = last;
+	lastb = last->rn_bit;
 
 	/* printf("rn %p, lastb %d\n", rn, lastb);*/
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405011504.s41F4X0J099720>