]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
wait-online: do not fail if we receive invalid messages
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 18 Jan 2019 22:59:17 +0000 (07:59 +0900)
committerLennart Poettering <lennart@poettering.net>
Mon, 21 Jan 2019 14:54:50 +0000 (15:54 +0100)
Fixes #11486.

src/network/wait-online/manager.c

index e1ccc9ff67629f7bf224c7ffd2c25c4895e7aada..67218b6db3635d596fe49744a76ccb6dbe2c288b 100644 (file)
@@ -89,16 +89,25 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *
         assert(mm);
 
         r = sd_netlink_message_get_type(mm, &type);
-        if (r < 0)
-                goto fail;
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: Could not get message type, ignoring: %m");
+                return 0;
+        }
 
         r = sd_rtnl_message_link_get_ifindex(mm, &ifindex);
-        if (r < 0)
-                goto fail;
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: Could not get ifindex from link, ignoring: %m");
+                return 0;
+        } else if (ifindex <= 0) {
+                log_warning("rtnl: received link message with invalid ifindex %d, ignoring", ifindex);
+                return 0;
+        }
 
         r = sd_netlink_message_read_string(mm, IFLA_IFNAME, &ifname);
-        if (r < 0)
-                goto fail;
+        if (r < 0) {
+                log_warning_errno(r, "rtnl: Received link message without ifname, ignoring: %m");
+                return 0;
+        }
 
         l = hashmap_get(m->links, INT_TO_PTR(ifindex));
 
@@ -110,16 +119,16 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *
 
                         r = link_new(m, &l, ifindex, ifname);
                         if (r < 0)
-                                goto fail;
+                                return log_error_errno(r, "Failed to create link object: %m");
 
                         r = link_update_monitor(l);
                         if (r < 0)
-                                goto fail;
+                                return log_error_errno(r, "Failed to initialize link object: %m");
                 }
 
                 r = link_update_rtnl(l, mm);
                 if (r < 0)
-                        goto fail;
+                        return log_warning_errno(r, "Failed to process RTNL link message: %m");;
 
                 break;
 
@@ -133,10 +142,6 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *
         }
 
         return 0;
-
-fail:
-        log_warning_errno(r, "Failed to process RTNL link message: %m");
-        return 0;
 }
 
 static int on_rtnl_event(sd_netlink *rtnl, sd_netlink_message *mm, void *userdata) {