NetBSD Problem Report #18170
Received: (qmail 20830 invoked by uid 605); 4 Sep 2002 20:12:59 -0000
Message-Id: <20020904201257.A643C11122@narn.netbsd.org>
Date: Wed, 4 Sep 2002 13:12:57 -0700 (PDT)
From: rob.lester@quantum.com
Sender: gnats-bugs-owner@netbsd.org
Reply-To: rob.lester@quantum.com
To: gnats-bugs@gnats.netbsd.org
Subject: caltontp() function in NTP subsystem ignores "seconds" field of input argument
X-Send-Pr-Version: www-1.0
>Number: 18170
>Category: lib
>Synopsis: caltontp() function in NTP subsystem ignores "seconds" field of input argument
>Confidential: no
>Severity: serious
>Priority: low
>Responsible: lib-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Sep 04 20:13:00 +0000 2002
>Closed-Date:
>Last-Modified: Fri Dec 05 16:25:00 +0000 2003
>Originator: Rob Lester
>Release: 1.5
>Organization:
Quantum Corporation
>Environment:
An embedded system which implements NTP support.
>Description:
The function caltontp() is used to convert a date/time timestamp to
an NTP compliant "number of seconds since 1/1/1900" timestamp. From
a review of the sources, it is clear that the seconds field
"second" of the input argument "struct calendar *jt" is not used by
caltontp().
Note however that the function which does conversions in the other
direction - caljulian() - does create the seconds field in the output
calendar structure when necessary.
This means that if you take a calendar structure, convert it to NTP
with caltontp(), and then reverse the conversion with caljulian(),
the resulting calendar structure has a zero in the seconds field
regardless of the seconds field in the input calendar structure.
The result is that up to a 1 minute precision error can occur when
restoring a saved NTP timestamp to calendar format.
>How-To-Repeat:
1. Instantiate a "struct calendar" variable named jt and an unsigned
long named ntp.
2. Initialize the fields in the variable jt to anything, except that
the field "second" must be non-zero.
3. Convert to an NTP timestamp: ntp = caltontp(&jt)
4. Convert back to calendar format: caljulian(ntp, &jt);
Now, jt.second is not the same as when you originally started. A loss
in precision of up to 1 minute has occurred due to the ignored
seconds field when caltontp() was called.
>Fix:
In caltontp(), change:
ntp_time =
ntp_days*SECSPERDAY+SECSPERMIN*(MINSPERHR*jt->hour + jt->minute);
To read:
ntp_time =
ntp_days*SECSPERDAY+SECSPERMIN*(MINSPERHR*jt->hour + jt->minute)
+jt->second;
>Release-Note:
>Audit-Trail:
From: Matthias Drochner <M.Drochner@fz-juelich.de>
To: rob.lester@quantum.com
Cc: gnats-bugs@gnats.netbsd.org
Subject: Re: lib/18170: caltontp() function in NTP subsystem ignores "seconds"
field of input argument
Date: Fri, 05 Dec 2003 17:24:30 +0100
This is still in ntp-4.2.0.
Can you report the bug to bugzilla.ntp.org?
best regards
Matthias
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.