From 0b76831f0bac4f50594a16a16c68217d0f8d48d6 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 8 Jan 2009 16:47:01 -0800 Subject: [PATCH] dhcp-client: Don't report long time to expiration after lease expires. There is a race between time advancing past the lease expiration time and actually transitioning to the expired state. Fix this race. Found by Chris Eagle via Fortify. --- lib/dhcp-client.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/dhcp-client.c b/lib/dhcp-client.c index 919bc31d..4c12b4eb 100644 --- a/lib/dhcp-client.c +++ b/lib/dhcp-client.c @@ -356,7 +356,12 @@ dhclient_get_state_elapsed(const struct dhclient *cli) unsigned int dhclient_get_lease_remaining(const struct dhclient *cli) { - return dhclient_is_bound(cli) ? cli->lease_expiration - time_now() : 0; + if (dhclient_is_bound(cli)) { + time_t now = time_now(); + return cli->lease_expiration > now ? cli->lease_expiration - now : 0; + } else { + return 0; + } } /* If 'cli' is bound to an IP address, returns that IP address; otherwise, -- 2.30.2