network: fix use-after-free in link_free

Freeing a link removes it both from addresses and addresses_foreign,
causing SIGSEGV if one of the sets is freed.
This commit is contained in:
Hristo Venev
2015-10-29 12:18:02 +02:00
parent 2c80779e33
commit 4701725cd5
+3 -3
View File
@@ -349,12 +349,12 @@ static void link_free(Link *link) {
while (!set_isempty(link->addresses))
address_free(set_first(link->addresses));
set_free(link->addresses);
while (!set_isempty(link->addresses_foreign))
address_free(set_first(link->addresses_foreign));
set_free(link->addresses_foreign);
link->addresses = set_free(link->addresses);
link->addresses_foreign = set_free(link->addresses_foreign);
while ((address = link->pool_addresses)) {
LIST_REMOVE(addresses, link->pool_addresses, address);