]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 3023] ntpdate cannot correct dates in the future.
authorJuergen Perlinger <perlinger@ntp.org>
Tue, 1 Mar 2016 07:30:22 +0000 (08:30 +0100)
committerJuergen Perlinger <perlinger@ntp.org>
Tue, 1 Mar 2016 07:30:22 +0000 (08:30 +0100)
bk: 56d5450ekhNG9y81GxG7ZyYK483rXw

ChangeLog
ntpdate/ntpdate.c

index c70fe8fc563cf0a16def01a652b989e8bc667f06..1eecb8c7aaf617c34c38d205b55b436011f51d5c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
 
 * [Bug 2994] Systems with HAVE_SIGNALED_IO fail to compile. perlinger@ntp.org
 * [Bug 2995] Fixes to compile on Windows
+* [Bug 3023] ntpdate cannot correct dates in the future. perlinger@ntp.org
 
 ---
 (4.2.8p6) 2016/01/20 Released by Harlan Stenn <stenn@ntp.org>
index a4271605c4137d492196129b775e7aacc090091a..be39cb030edb949bd256bd7819c69add177930ac 100644 (file)
@@ -1247,7 +1247,6 @@ static int
 clock_adjust(void)
 {
        register struct server *sp, *server;
-       s_fp absoffset;
        int dostep;
 
        for (sp = sys_servers; sp != NULL; sp = sp->next_server)
@@ -1270,10 +1269,15 @@ clock_adjust(void)
        } else if (never_step) {
                dostep = 0;
        } else {
-               absoffset = server->soffset;
-               if (absoffset < 0)
-                       absoffset = -absoffset;
-               dostep = (absoffset >= NTPDATE_THRESHOLD || absoffset < 0);
+               /* [Bug 3023] get absolute difference, avoiding signed
+                * integer overflow like hell.
+                */
+               u_fp absoffset;
+               if (server->soffset < 0)
+                       absoffset = 1u + (u_fp)(-(server->soffset + 1));
+               else
+                       absoffset = (u_fp)server->soffset;
+               dostep = (absoffset >= NTPDATE_THRESHOLD);
        }
 
        if (dostep) {