From: Martin Willi Date: Fri, 4 Dec 2015 08:05:31 +0000 (+0100) Subject: vici: Use value based array to store CHILD_SA ids during restart X-Git-Tag: 5.4.0dr1~19^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2facf18833fdc55ad72d1828ed62d8856d24430d;p=thirdparty%2Fstrongswan.git 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. --- diff --git a/src/libcharon/plugins/vici/vici_config.c b/src/libcharon/plugins/vici/vici_config.c index c1dbbc2ab3..69bcd4c7ad 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); }