aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-05-23 18:09:21 +0200
committerTobias Brunner <tobias@strongswan.org>2012-05-24 15:32:27 +0200
commit00e11bcefd04c6417196d37666ce95ea424d8261 (patch)
treec9af1b85de7ff7dfffd07acb0e0028173c7ca0e3 /src
parent624bb24d1257e8198aabe1c8fc2bf3ea65136e2d (diff)
downloadstrongswan-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.c16
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,