[Openswan dev] "pass == 2" is always false
D. Hugh Redelmeier
hugh at mimosa.com
Fri Jul 18 19:18:28 EDT 2008
I noticed that in openswan-2.6.15dr2/programs/pluto/state.c, function
same_phase1_no_phase2, line 661, there is a test "pass == 2" that has
never succeeded. I wonder what would happen if the test were changed to
one that did succeed during the second pass (pass == 1). I have no idea
if the code that has never executed has bugs that would thus be exposed.
if(pass == 2) return FALSE;
I have no idea if this has since been eliminated.
==================================
This is like the code that Paul found in foreach_states_by_connection_func
(an ungrammatical name):
if(pass == 2 && IS_ISAKMP_SA_ESTABLISHED(this->st_state)) {
continue;
}
The correct fix for the case that Paul found is NOT a simple change to
"pass == 1". The probably intention is something like this:
if (pass == 1 || can_have_no_children(this)) {
... the rest of the loop body ...
}
The intention is that we delete parents AFTER their children. This
is to avoid deleting the keying channel before the children that
should send a delete notification down the keying channel. One
implicit assumption is that family trees are at most 2 high, hence the
2 passes.
The test IS_ISAKMP_SA_ESTABLISHED is like !can_have_no_children but it
fails to handle IKEv2 states properly.
More information about the Dev
mailing list