I disagreed early on in the discussion but I've come around,
and believe this system call can require normalized tv's.

Scott Cheloha <[email protected]> wrote:

> Hey,
> 
> detha wrote on tech@ recently about how adjtime(2) now sets EINVAL
> if delta->tv_nsec < 0, which breaks xntpd's clock retardation.
> 
> Given the rarity of this syscall I'd rather patch the software than
> restore the 4.4BSD behavior.  I skimmed codesearch.debian.net and
> outside of noise from language bindings, noise from test suites, and
> noise from compilers, I found very little code using the call.  NTP
> and its various forks/rewrites, ptpd, systemd... that's about it.  How
> many callers are there in OpenBSD ports?
> 
> The attached patch should fix ntpd's problem.  I have only compiled
> it.  Unsure if this is the right way to submit this.  I fetched,
> extracted, and built, then I made my edit and did update-patches and
> this file was the result.  So I think I'm close.  At least, if you
> put this patch into ports/net/ntp/patches/patch-libntp_systime_c
> I think you'll be good to go.
> 
> detha: could you check if this fixes the problem?
> 
> Index: libntp/systime.c
> --- libntp/systime.c.orig
> +++ libntp/systime.c
> @@ -344,6 +344,10 @@ adj_systime(
>       if (isneg) {
>               adjtv.tv_sec = -adjtv.tv_sec;
>               adjtv.tv_usec = -adjtv.tv_usec;
> +             if (adjtv.tv_usec < 0) {
> +                     adjtv.tv_sec  -= 1;
> +                     adjtv.tv_usec += 1000000;
> +             }
>               sys_residual = -sys_residual;
>       }
>       if (adjtv.tv_sec != 0 || adjtv.tv_usec != 0) {
> 

Reply via email to