]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: fix crash in wireguard_done()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 3 Nov 2018 07:45:17 +0000 (16:45 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 Nov 2018 04:19:02 +0000 (13:19 +0900)
Fixes another issue in #10629.

src/network/netdev/wireguard.c
src/network/networkd-manager.c

index 2f4e7bdd9173e8f472cd7761a1b358768bdb992b..d773dedc54950a9150a28d3c024c2f47c0cb9d1a 100644 (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 = {
index 89fbb4168b40d9edda14d3e328b29f71c1710776..256605317ddf505fa584cc1d62c9b071754e2a52 100644 (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);