cleanup IKE-SA tree handling (fixes repeated-insert & double-remove)
authormarkus <markus@openbsd.org>
Tue, 6 May 2014 09:48:40 +0000 (09:48 +0000)
committermarkus <markus@openbsd.org>
Tue, 6 May 2014 09:48:40 +0000 (09:48 +0000)
commit4697d2e3bd014797ed8b327306077d52897f4db3
tree0dedc41d7b5a24583a49325d7a9ed95d81d7fa5e
parent8865c0e4a5ec18d2b3b45bdb5c0a7eb7520765b2
cleanup IKE-SA tree handling (fixes repeated-insert & double-remove)

sa_new() always re-inserts an SA into the SA tree. in case of a key
collision it would try to free the new SA. While doing that it would
accidentially free the existing SA, since config_free_sa() does
RB_REMOVE() uncoditionally.  This change fixes this by:
a) moving the responsibility for RB_REMOVE() to CALLER of config_free_sa() and
b) by calling config_free_sa() instead of sa_free() from sa_new()
It also changes to code to NEVER re-add an SA to the tree. So
RB_INSERT() is ONLY called once per SA. The code also makes sure
that there is always a KEY defined for this tree (ispi).

ok mikeb@
sbin/iked/config.c
sbin/iked/ikev2.c
sbin/iked/policy.c