From: Yu Watanabe Date: Sat, 3 Nov 2018 07:45:17 +0000 (+0900) Subject: network: fix crash in wireguard_done() X-Git-Tag: v240~404^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c195364da50bd478222ccf2d20fb18b6d254932c;p=thirdparty%2Fsystemd.git network: fix crash in wireguard_done() Fixes another issue in #10629. --- diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index 2f4e7bdd917..d773dedc549 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -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 = { diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 89fbb4168b4..256605317dd 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -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);