aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2015-12-04 09:05:31 +0100
committerMartin Willi <martin@strongswan.org>2015-12-07 10:05:07 +0100
commit2facf18833fdc55ad72d1828ed62d8856d24430d (patch)
tree1f8786d55724514afca8936201a61cb06d09ea9b /src/libcharon
parent01caed533b8df3c96fc039a863c8d5f0c64e134d (diff)
downloadstrongswan-2facf18833fdc55ad72d1828ed62d8856d24430d.tar.bz2
strongswan-2facf18833fdc55ad72d1828ed62d8856d24430d.tar.xz
vici: Use value based array to store CHILD_SA ids during restart
The previous approach stored a pointer to a volatile stack variable, which works for a single ID, but not for multiple.
Diffstat (limited to 'src/libcharon')
-rw-r--r--src/libcharon/plugins/vici/vici_config.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c
index c1dbbc2ab..69bcd4c7a 100644
--- a/src/libcharon/plugins/vici/vici_config.c
+++ b/src/libcharon/plugins/vici/vici_config.c
@@ -1619,7 +1619,7 @@ static void clear_start_action(private_vici_config_t *this,
enumerator_t *enumerator, *children;
child_sa_t *child_sa;
ike_sa_t *ike_sa;
- u_int32_t id = 0, *del;
+ u_int32_t id = 0;
array_t *ids = NULL;
char *name;
@@ -1637,7 +1637,8 @@ static void clear_start_action(private_vici_config_t *this,
if (streq(name, child_sa->get_name(child_sa)))
{
id = child_sa->get_unique_id(child_sa);
- array_insert_create(&ids, ARRAY_TAIL, &id);
+ array_insert_create_value(&ids, sizeof(id),
+ ARRAY_TAIL, &id);
}
}
children->destroy(children);
@@ -1646,11 +1647,11 @@ static void clear_start_action(private_vici_config_t *this,
if (array_count(ids))
{
- while (array_remove(ids, ARRAY_HEAD, &del))
+ while (array_remove(ids, ARRAY_HEAD, &id))
{
- DBG1(DBG_CFG, "closing '%s' #%u", name, *del);
+ DBG1(DBG_CFG, "closing '%s' #%u", name, id);
charon->controller->terminate_child(charon->controller,
- *del, NULL, NULL, 0);
+ id, NULL, NULL, 0);
}
array_destroy(ids);
}