network: fix crash in wireguard_done()

Fixes another issue in #10629.
This commit is contained in:
Yu Watanabe
2018-11-05 13:19:02 +09:00
parent 56ba90c2df
commit c195364da5
2 changed files with 13 additions and 3 deletions
+12 -1
View File
@@ -717,10 +717,11 @@ static void wireguard_done(NetDev *netdev) {
Wireguard *w;
WireguardPeer *peer;
WireguardIPmask *mask;
WireguardEndpoint *e;
assert(netdev);
w = WIREGUARD(netdev);
assert(!w->unresolved_endpoints);
assert(w);
while ((peer = w->peers)) {
LIST_REMOVE(peers, w->peers, peer);
@@ -730,6 +731,16 @@ static void wireguard_done(NetDev *netdev) {
}
free(peer);
}
while ((e = w->unresolved_endpoints)) {
LIST_REMOVE(endpoints, w->unresolved_endpoints, e);
wireguard_endpoint_free(e);
}
while ((e = w->failed_endpoints)) {
LIST_REMOVE(endpoints, w->failed_endpoints, e);
wireguard_endpoint_free(e);
}
}
const NetDevVTable wireguard_vtable = {
+1 -2
View File
@@ -1418,6 +1418,7 @@ void manager_free(Manager *m) {
sd_netlink_unref(m->rtnl);
sd_netlink_unref(m->genl);
sd_resolve_unref(m->resolve);
while ((network = m->networks))
network_free(network);
@@ -1456,8 +1457,6 @@ void manager_free(Manager *m) {
sd_event_unref(m->event);
sd_resolve_unref(m->resolve);
sd_device_monitor_unref(m->device_monitor);
sd_bus_unref(m->bus);