chiark / gitweb /
networkd: fix use-after-free
[elogind.git] / src / network / networkd-manager.c
index c730e7148df35a5c4d06ca7861b73b35df3b92ef..ddbdabbff903ece3bbecde8fb76b87dbc09c243c 100644 (file)
@@ -33,7 +33,7 @@ const char* const network_dirs[] = {
         "/etc/systemd/network",
         "/run/systemd/network",
         "/usr/lib/systemd/network",
-#ifdef HAVE_SPLIT_USER
+#ifdef HAVE_SPLIT_USR
         "/lib/systemd/network",
 #endif
         NULL};
@@ -145,13 +145,13 @@ void manager_free(Manager *m) {
         sd_event_source_unref(m->sigint_event_source);
         sd_event_unref(m->event);
 
-        while ((network = m->networks))
-                network_free(network);
-
         while ((link = hashmap_first(m->links)))
                 link_free(link);
         hashmap_free(m->links);
 
+        while ((network = m->networks))
+                network_free(network);
+
         while ((netdev = hashmap_first(m->netdevs)))
                 netdev_free(netdev);
         hashmap_free(m->netdevs);
@@ -312,23 +312,19 @@ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, vo
 
         r = sd_rtnl_message_link_get_ifindex(message, &ifindex);
         if (r < 0 || ifindex <= 0) {
-                log_debug("received RTM_NEWLINK message without valid ifindex");
+                log_warning("received RTM_NEWLINK message without valid ifindex");
                 return 0;
         }
 
         r = sd_rtnl_message_read_string(message, IFLA_IFNAME, &name);
         if (r < 0)
-                log_debug("received RTM_NEWLINK message without valid IFLA_IFNAME");
+                log_warning("received RTM_NEWLINK message without valid ifname");
         else {
                 NetDev *netdev;
 
                 r = netdev_get(m, name, &netdev);
-                if (r >= 0) {
-                        r = netdev_set_ifindex(netdev, ifindex);
-                        if (r < 0)
-                                log_debug("could not set ifindex of netdev '%s' to %d: %s",
-                                          name, ifindex, strerror(-r));
-                }
+                if (r >= 0)
+                        netdev_set_ifindex(netdev, message);
         }
 
         r = link_get(m, ifindex, &link);