diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-05-23 18:09:21 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-05-24 15:32:27 +0200 |
commit | 00e11bcefd04c6417196d37666ce95ea424d8261 (patch) | |
tree | c9af1b85de7ff7dfffd07acb0e0028173c7ca0e3 /src | |
parent | 624bb24d1257e8198aabe1c8fc2bf3ea65136e2d (diff) | |
download | strongswan-00e11bcefd04c6417196d37666ce95ea424d8261.tar.bz2 strongswan-00e11bcefd04c6417196d37666ce95ea424d8261.tar.xz |
Fix memleak during Quick Mode in case no SPI can be allocated from kernel.
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ikev1/tasks/quick_mode.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/libcharon/sa/ikev1/tasks/quick_mode.c b/src/libcharon/sa/ikev1/tasks/quick_mode.c index 7c843e85e..cc3ac6720 100644 --- a/src/libcharon/sa/ikev1/tasks/quick_mode.c +++ b/src/libcharon/sa/ikev1/tasks/quick_mode.c @@ -629,7 +629,12 @@ METHOD(task_t, build_i, status_t, this->ike_sa->get_other_host(this->ike_sa), this->config, this->reqid, this->udp); - list = this->config->get_proposals(this->config, FALSE); + this->mode = this->config->get_mode(this->config); + if (this->udp && this->mode == MODE_TRANSPORT) + { + /* TODO-IKEv1: disable NAT-T for TRANSPORT mode by default? */ + add_nat_oa_payloads(this, message); + } this->spi_i = this->child_sa->alloc_spi(this->child_sa, PROTO_ESP); if (!this->spi_i) @@ -637,6 +642,8 @@ METHOD(task_t, build_i, status_t, DBG1(DBG_IKE, "allocating SPI from kernel failed"); return FAILED; } + + list = this->config->get_proposals(this->config, FALSE); enumerator = list->create_enumerator(list); while (enumerator->enumerate(enumerator, &proposal)) { @@ -644,13 +651,6 @@ METHOD(task_t, build_i, status_t, } enumerator->destroy(enumerator); - this->mode = this->config->get_mode(this->config); - if (this->udp && this->mode == MODE_TRANSPORT) - { - /* TODO-IKEv1: disable NAT-T for TRANSPORT mode by default? */ - add_nat_oa_payloads(this, message); - } - get_lifetimes(this); sa_payload = sa_payload_create_from_proposals_v1(list, this->lifetime, this->lifebytes, AUTH_NONE, |