network: configure address with requested lifetime
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 19 Jul 2021 06:18:37 +0000 (15:18 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 10 Aug 2021 08:38:17 +0000 (10:38 +0200)
When assigning the same address provided by a dynamic addressing
protocol, the new lifetime is stored on Request::Address, but not
Address object in Link object, which can be obtained by address_get().
So, we need to configure address with Address object in Request.

Fixes #20245.

(cherry picked from commit 2d302d88e4dfd48b18486c5ce2c7dfeb229a1b0a)

src/network/networkd-address.c

index 6b2230b7256c55ee81f8255666e3303333bd6178..7b221516d752d7158aeac2431279da771cd3467e 100644 (file)
@@ -1272,17 +1272,17 @@ int request_process_address(Request *req) {
         if (r <= 0)
                 return r;
 
-        r = address_get(link, req->address, &a);
-        if (r < 0)
-                return r;
-
-        r = address_configure(a, link, req->netlink_handler);
+        r = address_configure(req->address, link, req->netlink_handler);
         if (r < 0)
                 return r;
 
         /* To prevent a double decrement on failure in after_configure(). */
         req->message_counter = NULL;
 
+        r = address_get(link, req->address, &a);
+        if (r < 0)
+                return r;
+
         if (req->after_configure) {
                 r = req->after_configure(req, a);
                 if (r < 0)