From 8bea7e700f5e73d9a92583f71647c9788defb843 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 2 Oct 2019 10:29:41 +0200 Subject: [PATCH] sd-dhcp-client: do not crash if sd_dhcp_client_send_release() is called with no lease Again, a public function should not crash if called at an inopportune moment. Also, make sure we don't call the function if we have no lease. --- src/libsystemd-network/sd-dhcp-client.c | 1 + src/network/networkd-dhcp4.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 3f386db2f55..02f3569edca 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -1895,6 +1895,7 @@ 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(client->state != DHCP_STATE_STOPPED, -ESTALE); + assert_return(client->lease, -EUNATCH); _cleanup_free_ DHCPPacket *release = NULL; size_t optoffset, optlen; diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 78cd2411402..db762163a88 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -864,10 +864,10 @@ static int dhcp4_handler(sd_dhcp_client *client, int event, void *userdata) { return 0; } - if (link->network->dhcp_send_release) - (void) sd_dhcp_client_send_release(client); - if (link->dhcp_lease) { + if (link->network->dhcp_send_release) + (void) sd_dhcp_client_send_release(client); + r = dhcp_lease_lost(link); if (r < 0) { link_enter_failed(link); -- 2.47.3