aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2010-06-02 11:43:39 +0200
committerMartin Willi <martin@revosec.ch>2010-06-02 11:48:52 +0200
commit2f57e6da0e83a3e64e36dd2559b2579b9b1e32a2 (patch)
treee2eb44294b5a862e828ab523cfff1753be1d33e8 /src
parentfe02d99b9602c81a804892a67fde2890ef1f6aa6 (diff)
downloadstrongswan-2f57e6da0e83a3e64e36dd2559b2579b9b1e32a2.tar.bz2
strongswan-2f57e6da0e83a3e64e36dd2559b2579b9b1e32a2.tar.xz
Disable close action for a redundant CHILD_SA resulting from a rekey collision
If a rekey collision is detected, the winning peer of the nonce compare will delete the redundant CHILD_SA. The other peer should not enforce the close action on this CHILD, as it would reestablish the redundat CHILD_SA. Thanks to Thomas Egerer from secunet for pointing this out and the initial patchset.
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/sa/tasks/child_rekey.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libcharon/sa/tasks/child_rekey.c b/src/libcharon/sa/tasks/child_rekey.c
index 533141907..fb3452efd 100644
--- a/src/libcharon/sa/tasks/child_rekey.c
+++ b/src/libcharon/sa/tasks/child_rekey.c
@@ -234,9 +234,14 @@ static child_sa_t *handle_collision(private_child_rekey_t *this)
if (memcmp(this_nonce.ptr, other_nonce.ptr,
min(this_nonce.len, other_nonce.len)) < 0)
{
+ child_sa_t *child_sa;
+
DBG1(DBG_IKE, "CHILD_SA rekey collision won, "
"deleting rekeyed child");
to_delete = this->child_sa;
+ /* disable close action for the redundand child */
+ child_sa = other->child_create->get_child(other->child_create);
+ child_sa->set_close_action(child_sa, ACTION_NONE);
}
else
{