From: Yu Watanabe Date: Fri, 9 Apr 2021 11:16:35 +0000 (+0900) Subject: network: refuse to configure engines such as DHCP client more than once X-Git-Tag: v249-rc1~401^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bc9e40c9a1534ee737d4131d7ba8dcc36d1d5f05;p=thirdparty%2Fsystemd.git network: refuse to configure engines such as DHCP client more than once --- diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 6f06e2218d3..66568c87fbb 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -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, diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index aa077d6219f..f5e66b94575 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -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) diff --git a/src/network/networkd-ipv4ll.c b/src/network/networkd-ipv4ll.c index 65266633e3b..7aad2131fd2 100644 --- a/src/network/networkd-ipv4ll.c +++ b/src/network/networkd-ipv4ll.c @@ -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) { diff --git a/src/network/networkd-lldp-rx.c b/src/network/networkd-lldp-rx.c index bf1dd045b87..5b1b90cdd3d 100644 --- a/src/network/networkd-lldp-rx.c +++ b/src/network/networkd-lldp-rx.c @@ -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) diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 6830cf592e2..7a975f3a916 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -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) diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 8d8c21c0d8d..19f75e01da5 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -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;