Mercurial > hg > dhcpcd
changeset 997:69fbe949bcbf draft
As we now use times to trigger again instead of decreasing timers, ensure our lease fits. We may wish to revisit this again if we need decreasing timers once more.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 17 Sep 2008 13:09:30 +0000 |
| parents | 46cb7799f9d3 |
| children | 786b0f964829 |
| files | dhcp.c eloop.c |
| diffstat | 2 files changed, 8 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/dhcp.c Wed Sep 17 10:37:03 2008 +0000 +++ b/dhcp.c Wed Sep 17 13:09:30 2008 +0000 @@ -1252,15 +1252,15 @@ void get_lease(struct dhcp_lease *lease, const struct dhcp_message *dhcp) { - time_t t; + struct timeval now; lease->addr.s_addr = dhcp->yiaddr; if (get_option_addr(&lease->net.s_addr, dhcp, DHO_SUBNETMASK) == -1) lease->net.s_addr = get_netmask(dhcp->yiaddr); if (get_option_uint32(&lease->leasetime, dhcp, DHO_LEASETIME) == 0) { /* Ensure that we can use the lease */ - t = 0; - if (t + (time_t)lease->leasetime < t) + get_monotonic(&now); + if (now.tv_sec + (time_t)lease->leasetime < now.tv_sec) lease->leasetime = ~0U; /* Infinite lease */ } else lease->leasetime = DEFAULT_LEASETIME;
--- a/eloop.c Wed Sep 17 10:37:03 2008 +0000 +++ b/eloop.c Wed Sep 17 13:09:30 2008 +0000 @@ -117,6 +117,11 @@ get_monotonic(&now); timeradd(&now, when, &w); + /* Check for time_t overflow. */ + if (timercmp(&w, &now, <)) { + errno = ERANGE; + return; + } /* Remove existing timeout if present */ for (t = timeouts; t; t = t->next) {
