The ntpd client code corrects both T1 and T4 with the current offset
authorbluhm <bluhm@openbsd.org>
Thu, 18 Mar 2021 11:06:41 +0000 (11:06 +0000)
committerbluhm <bluhm@openbsd.org>
Thu, 18 Mar 2021 11:06:41 +0000 (11:06 +0000)
commitacf512e2d5a23adbb90b1ee034021e27be6722d9
tree8bd910f61326b93048951a052171b5d65ef8a5bc
parent59a500d93d9cd576862f9394afd9ec710b3917f8
The ntpd client code corrects both T1 and T4 with the current offset
returned by adjtime(2) from the kernel.  T1 is local time when the
NTP packet is sent and T4 when the response is received.  If between
these events a NTP reply from another server is received, it may
change the kernel offset with adjtime(2).  Then the calulation of
the client offset was done with different bases, the result was
wrong and the system time started moving around.
So instead of correcting T1 and T4 individually at different events,
correct their sum once.
Error handling was missing if there is no timestamp in the response.
As this should not happen in our kernel, fatal() is appropriate.
tested by weerd@; OK claudio@
usr.sbin/ntpd/client.c