From: Yu Watanabe Date: Wed, 21 Aug 2024 01:23:06 +0000 (+0900) Subject: sd-dhcp-client: refuse to send RELEASE or friends gracefully when the daemon is stopp... X-Git-Tag: v257-rc1~665^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8cdd37d0aed8423d6744dd6637955760346939a;p=thirdparty%2Fsystemd.git sd-dhcp-client: refuse to send RELEASE or friends gracefully when the daemon is stopped or so We can easily hit the assertions without checking the internal states of the DHCP client before calling these functions. That's annoying. Let's do more gracefully. --- diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 8b8d0611a27..94ad5bbea95 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -2138,14 +2138,8 @@ static int client_receive_message_raw( } int sd_dhcp_client_send_renew(sd_dhcp_client *client) { - assert_return(client, -EINVAL); - assert_return(sd_dhcp_client_is_running(client), -ESTALE); - assert_return(client->fd >= 0, -EINVAL); - - if (client->state != DHCP_STATE_BOUND) - return 0; - - assert(client->lease); + if (!sd_dhcp_client_is_running(client) || client->state != DHCP_STATE_BOUND) + return 0; /* do nothing */ client->start_delay = 0; client->discover_attempt = 1; @@ -2199,14 +2193,13 @@ int sd_dhcp_client_start(sd_dhcp_client *client) { } int sd_dhcp_client_send_release(sd_dhcp_client *client) { - assert_return(client, -EINVAL); - assert_return(sd_dhcp_client_is_running(client), -ESTALE); - assert_return(client->lease, -EUNATCH); - _cleanup_free_ DHCPPacket *release = NULL; size_t optoffset, optlen; int r; + if (!sd_dhcp_client_is_running(client) || !client->lease) + return 0; /* do nothing */ + r = client_message_init(client, &release, DHCP_RELEASE, &optlen, &optoffset); if (r < 0) return r; @@ -2234,14 +2227,13 @@ int sd_dhcp_client_send_release(sd_dhcp_client *client) { } int sd_dhcp_client_send_decline(sd_dhcp_client *client) { - assert_return(client, -EINVAL); - assert_return(sd_dhcp_client_is_running(client), -ESTALE); - assert_return(client->lease, -EUNATCH); - _cleanup_free_ DHCPPacket *release = NULL; size_t optoffset, optlen; int r; + if (!sd_dhcp_client_is_running(client) || !client->lease) + return 0; /* do nothing */ + r = client_message_init(client, &release, DHCP_DECLINE, &optlen, &optoffset); if (r < 0) return r;