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:
parent
71eeea5bab
commit
6b7b44acd9
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=155442
@ -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;)
|
||||
|
Loading…
Reference in New Issue
Block a user