]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: refuse to configure engines such as DHCP client more than once
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 9 Apr 2021 11:16:35 +0000 (20:16 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 13 Apr 2021 05:38:24 +0000 (14:38 +0900)
src/network/networkd-dhcp4.c
src/network/networkd-dhcp6.c
src/network/networkd-ipv4ll.c
src/network/networkd-lldp-rx.c
src/network/networkd-ndisc.c
src/network/networkd-radv.c

index 6f06e2218d348897461b8b66984da1fc4351d998..66568c87fbbe806ab63c812f2d32ff571e15cbdb 100644 (file)
@@ -1294,15 +1294,16 @@ int dhcp4_configure(Link *link) {
         if (!link_dhcp4_enabled(link))
                 return 0;
 
-        if (!link->dhcp_client) {
-                r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to allocate DHCP4 client: %m");
+        if (link->dhcp_client)
+                return -EBUSY; /* Already configured. */
 
-                r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0);
-                if (r < 0)
-                        return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to attach event to DHCP4 client: %m");
-        }
+        r = sd_dhcp_client_new(&link->dhcp_client, link->network->dhcp_anonymize);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to allocate DHCP4 client: %m");
+
+        r = sd_dhcp_client_attach_event(link->dhcp_client, link->manager->event, 0);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "DHCP4 CLIENT: Failed to attach event to DHCP4 client: %m");
 
         r = sd_dhcp_client_set_mac(link->dhcp_client,
                                    link->hw_addr.addr.bytes,
index aa077d6219ffc7848ab97608b512dabe5d548686..f5e66b945758481feb4ae8737d868a3e2378f399 100644 (file)
@@ -1456,7 +1456,7 @@ int dhcp6_configure(Link *link) {
                 return 0;
 
         if (link->dhcp6_client)
-                return 0;
+                return -EBUSY;
 
         r = sd_dhcp6_client_new(&client);
         if (r == -ENOMEM)
index 65266633e3b01f40da887c9cbfd8bff900daae87..7aad2131fd2c419df8ef9868bfa12042885aea0e 100644 (file)
@@ -151,15 +151,16 @@ int ipv4ll_configure(Link *link) {
         if (!link_ipv4ll_enabled(link))
                 return 0;
 
-        if (!link->ipv4ll) {
-                r = sd_ipv4ll_new(&link->ipv4ll);
-                if (r < 0)
-                        return r;
+        if (link->ipv4ll)
+                return -EBUSY;
 
-                r = sd_ipv4ll_attach_event(link->ipv4ll, link->manager->event, 0);
-                if (r < 0)
-                        return r;
-        }
+        r = sd_ipv4ll_new(&link->ipv4ll);
+        if (r < 0)
+                return r;
+
+        r = sd_ipv4ll_attach_event(link->ipv4ll, link->manager->event, 0);
+        if (r < 0)
+                return r;
 
         if (link->sd_device &&
             net_get_unique_predictable_data(link->sd_device, true, &seed) >= 0) {
index bf1dd045b870a4622737a8abd66d1c3197987d87..5b1b90cdd3deb0210dbfaa19eaebf9e24b1e8c63 100644 (file)
@@ -73,15 +73,16 @@ int link_lldp_rx_configure(Link *link) {
         if (!link_lldp_rx_enabled(link))
                 return 0;
 
-        if (!link->lldp) {
-                r = sd_lldp_new(&link->lldp);
-                if (r < 0)
-                        return r;
+        if (link->lldp)
+                return -EBUSY;
 
-                r = sd_lldp_attach_event(link->lldp, link->manager->event, 0);
-                if (r < 0)
-                        return r;
-        }
+        r = sd_lldp_new(&link->lldp);
+        if (r < 0)
+                return r;
+
+        r = sd_lldp_attach_event(link->lldp, link->manager->event, 0);
+        if (r < 0)
+                return r;
 
         r = sd_lldp_set_ifindex(link->lldp, link->ifindex);
         if (r < 0)
index 6830cf592e231be985d8884c4386e03b46f42bfb..7a975f3a9169414550027d75562f187442fed058 100644 (file)
@@ -1316,7 +1316,7 @@ int ndisc_configure(Link *link) {
                 return 0;
 
         if (link->ndisc)
-                return 0; /* Already configured. */
+                return -EBUSY; /* Already configured. */
 
         r = sd_ndisc_new(&link->ndisc);
         if (r < 0)
index 8d8c21c0d8d6634bca283f1d3d78c116f716273b..19f75e01da5b25b995d0929ea1dee4dd940bd82a 100644 (file)
@@ -644,6 +644,9 @@ int radv_configure(Link *link) {
         if (!link_radv_enabled(link))
                 return 0;
 
+        if (link->radv)
+                return -EBUSY;
+
         r = sd_radv_new(&link->radv);
         if (r < 0)
                 return r;