Files
dnsmasq/src
Matt Whitlock 0140454ba2 dnsmasq_time: avoid signed integer overflow when HAVE_BROKEN_RTC
The dnsmasq_time() function, in the case of HAVE_BROKEN_RTC, was calling
times() to read the number of ticks "elapsed since an arbitrary point in
the past" and then dividing that by sysconf(_SC_CLK_TCK) to compute the
number of seconds elapsed since that arbitrary instant. This works fine
until the number of ticks exceeds 2^31, beyond which time the function
would begin erroneously returning negative times. On my system this
happens after approximately 248 days of uptime. A symptom is that
dnsmasq no longer populates the resolver cache with DHCP-derived names
at startup, as the inserted cache entries immediately expire due to
having negative expiration times that cause is_expired() to return true
when called with now==0.

This commit replaces the archaic implementation of dnsmasq_time() with a
call to the POSIX-standardized clock_gettime(CLOCK_MONOTONIC), thereby
eliminating the need to convert manually from ticks to seconds. The new
implementation will yield correct results until the system uptime
exceeds approximately 68 years.

Signed-off-by: Matt Whitlock <dnsmasq@mattwhitlock.name>
2021-09-29 09:46:13 +01:00
..
2021-04-09 17:27:36 +01:00
2021-09-11 17:56:01 +01:00
2021-04-09 17:27:36 +01:00
2021-04-09 17:27:36 +01:00
2021-09-11 21:37:18 +01:00
2021-04-09 17:27:36 +01:00
2021-09-11 21:36:30 +01:00
2021-08-11 09:10:39 +01:00
2021-09-11 22:08:25 +01:00
2021-04-09 17:27:36 +01:00
2021-07-02 16:58:48 +01:00
2021-04-09 17:27:36 +01:00
2021-08-12 17:02:45 +01:00
2021-04-09 17:27:36 +01:00
2021-09-11 21:51:10 +01:00
2021-03-28 00:58:54 +00:00
2021-09-11 14:39:36 +01:00
2021-08-12 17:02:45 +01:00