From: Yu Watanabe Date: Thu, 16 Jul 2020 01:12:18 +0000 (+0900) Subject: network: dhcp4: also release old lease in dhcp_lease_lost() X-Git-Tag: v246-rc2~59^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75be72d139b64f9793e1ab04cd8737c3a176ac15;p=thirdparty%2Fsystemd.git network: dhcp4: also release old lease in dhcp_lease_lost() The lease lost may happen during renewing address. If it happens, assertion hits in dhcp4_release_old_lease(). --- diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index bad7970e2ba..fd26be18fdb 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -27,7 +27,7 @@ static int dhcp_remove_address(Link *link, sd_dhcp_lease *lease, const struct in static int dhcp4_update_address(Link *link, bool announce); static int dhcp4_remove_all(Link *link); -void dhcp4_release_old_lease(Link *link) { +static void dhcp4_release_old_lease(Link *link) { struct in_addr address = {}, address_old = {}; assert(link); @@ -793,6 +793,9 @@ static int dhcp_lease_lost(Link *link) { link->dhcp4_configured = false; + /* dhcp_lease_lost() may be called during renewing IP address. */ + dhcp4_release_old_lease(link); + r = dhcp4_remove_all(link); if (r < 0) return r; diff --git a/src/network/networkd-dhcp4.h b/src/network/networkd-dhcp4.h index 96ac696ce6e..7a80897ffcd 100644 --- a/src/network/networkd-dhcp4.h +++ b/src/network/networkd-dhcp4.h @@ -17,7 +17,6 @@ typedef enum DHCPClientIdentifier { _DHCP_CLIENT_ID_INVALID = -1, } DHCPClientIdentifier; -void dhcp4_release_old_lease(Link *link); int dhcp4_configure(Link *link); int dhcp4_set_client_identifier(Link *link); int dhcp4_set_promote_secondaries(Link *link); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 91ec9590116..2184a326e13 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -800,8 +800,6 @@ int link_stop_clients(Link *link, bool may_keep_dhcp) { assert(link->manager); assert(link->manager->event); - dhcp4_release_old_lease(link); - bool keep_dhcp = may_keep_dhcp && link->network && (link->manager->restarting ||