The code in rn_walktree_from() that checks if we backed up too far

did not stop at the right node. Change the backtracking check from
smaller-than to smaller-or-equal to prevent this from happening.
While here fix one additional problem where the insertion of the
default route traversed the entire tree.

PR:		kern/38752
Submitted by:	qingli (before I became committer)
Reviewed by:	andre
MFC after:	3 days
This commit is contained in:
Qing Li 2006-02-07 20:25:39 +00:00
parent 71eeea5bab
commit 6b7b44acd9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=155442

View File

@ -1006,7 +1006,7 @@ rn_walktree_from(h, a, m, f, w)
rn = rn->rn_parent;
/* if went up beyond last, stop */
if (rn->rn_bit < lastb) {
if (rn->rn_bit <= lastb) {
stopping = 1;
/* printf("up too far\n"); */
/*
@ -1018,6 +1018,14 @@ rn_walktree_from(h, a, m, f, w)
*/
}
}
/*
* At the top of the tree, no need to traverse the right
* half, prevent the traversal of the entire tree in the
* case of default route.
*/
if (rn->rn_parent->rn_flags & RNF_ROOT)
stopping = 1;
/* Find the next *leaf* since next node might vanish, too */
for (rn = rn->rn_parent->rn_right; rn->rn_bit >= 0;)