From: Yu Watanabe Date: Wed, 30 Aug 2023 08:33:01 +0000 (+0900) Subject: sd-dhcp-client: ensure IAID and DUID being set on start X-Git-Tag: v255-rc1~618^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5e2a89d84bddb79452917d2565aa7cc59a24047e;p=thirdparty%2Fsystemd.git sd-dhcp-client: ensure IAID and DUID being set on start After b2851e8d6287ab9bb3cd6e42395271c45ce0e377, if IAID and DUID are not set on start, calling sd_dhcp_client_set_iaid_duid_en() in client_message_init() triggers assertion, as the client is already running at the stage. Let's set IAID and DUID earlier. Fixes #28990. --- diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 265750d0904..21b65920374 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -870,13 +870,6 @@ static int client_message_init( if (client->request_broadcast || client->arp_type != ARPHRD_ETHER) packet->dhcp.flags = htobe16(0x8000); - /* If no client identifier exists, construct an RFC 4361-compliant one */ - if (client->client_id_len == 0) { - r = sd_dhcp_client_set_iaid_duid_en(client, /* iaid_set = */ false, /* iaid = */ 0); - if (r < 0) - return r; - } - /* Some DHCP servers will refuse to issue an DHCP lease if the Client Identifier option is not set */ r = dhcp_option_append(&packet->dhcp, optlen, &optoffset, 0, @@ -2075,6 +2068,13 @@ int sd_dhcp_client_start(sd_dhcp_client *client) { if (r < 0) return r; + /* If no client identifier exists, construct an RFC 4361-compliant one */ + if (client->client_id_len == 0) { + r = sd_dhcp_client_set_iaid_duid_en(client, /* iaid_set = */ false, /* iaid = */ 0); + if (r < 0) + return r; + } + /* RFC7844 section 3.3: SHOULD perform a complete four-way handshake, starting with a DHCPDISCOVER, to obtain a new address lease. If the client can