]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: nexthop: add NextHop object before sending netlink request
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 7 May 2021 11:52:49 +0000 (20:52 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 12 May 2021 02:26:06 +0000 (11:26 +0900)
Otherwise, if nexthop_add() fails, then assertion about nexthop_messages in
static_nexthop_handler() will be triggered.

src/network/networkd-nexthop.c

index b0759cac9019590cad13f51b829cc1aac8f94621..661310352ca5fca4f3001b73f483e02a11704eb2 100644 (file)
@@ -413,7 +413,7 @@ static int nexthop_configure(
                 NextHop **ret) {
 
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
-        int r;
+        int r, k;
 
         assert(link);
         assert(link->manager);
@@ -458,6 +458,10 @@ static int nexthop_configure(
                 }
         }
 
+        k = nexthop_add(link, nexthop, ret);
+        if (k < 0)
+                return log_link_error_errno(link, k, "Could not add nexthop: %m");
+
         r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
                                link_netlink_destroy_callback, link);
         if (r < 0)
@@ -465,11 +469,7 @@ static int nexthop_configure(
 
         link_ref(link);
 
-        r = nexthop_add(link, nexthop, ret);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not add nexthop: %m");
-
-        return r;
+        return k;
 }
 
 static int static_nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {