diff options
author | Luca Boccassi <bluca@debian.org> | 2022-10-31 21:01:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-31 21:01:57 +0100 |
commit | 7319adcd1ba0582850adb49ae6cce69ddb41b7e2 (patch) | |
tree | 19e96a599c8ede010a5644aaac0c35f2a2d82bed /src/network | |
parent | 4b9cfe08bafe24f685b153b89e7bd8d94eebec56 (diff) | |
parent | 14805b1468dc73bc10d90b69975a5c8914609bb7 (diff) | |
download | systemd-7319adcd1ba0582850adb49ae6cce69ddb41b7e2.tar.gz |
Merge pull request #25142 from yuwata/network-fix-race-in-device-renaming-vs-dhcp
network,dhcp: fix theoretical race in device renaming
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/networkd-dhcp4.c | 4 | ||||
-rw-r--r-- | src/network/networkd-dhcp6.c | 4 | ||||
-rw-r--r-- | src/network/networkd-link.c | 12 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index c5bddb60fd..e4005719d0 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1357,6 +1357,10 @@ static int dhcp4_configure(Link *link) { if (r < 0) return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to attach event to DHCPv4 client: %m"); + r = sd_dhcp_client_attach_device(link->dhcp_client, link->dev); + if (r < 0) + return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to attach device: %m"); + r = sd_dhcp_client_set_mac(link->dhcp_client, link->hw_addr.bytes, link->bcast_addr.length > 0 ? link->bcast_addr.bytes : NULL, diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 789868c26a..d6ec233351 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -594,6 +594,10 @@ static int dhcp6_configure(Link *link) { if (r < 0) return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to attach event: %m"); + r = sd_dhcp6_client_attach_device(client, link->dev); + if (r < 0) + return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to attach device: %m"); + r = dhcp6_set_identifier(link, client); if (r < 0) return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to set identifier: %m"); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 00e4e451ef..04e3432c94 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1410,6 +1410,18 @@ static int link_initialized(Link *link, sd_device *device) { * or sysattrs) may be outdated. */ device_unref_and_replace(link->dev, device); + if (link->dhcp_client) { + r = sd_dhcp_client_attach_device(link->dhcp_client, link->dev); + if (r < 0) + log_link_warning_errno(link, r, "Failed to attach device to DHCPv4 client, ignoring: %m"); + } + + if (link->dhcp6_client) { + r = sd_dhcp6_client_attach_device(link->dhcp6_client, link->dev); + if (r < 0) + log_link_warning_errno(link, r, "Failed to attach device to DHCPv6 client, ignoring: %m"); + } + r = link_set_sr_iov_ifindices(link); if (r < 0) log_link_warning_errno(link, r, "Failed to manage SR-IOV PF and VF ports, ignoring: %m"); |