Thursday, September 26, 2019

Re: net/ntp: normalize adjustment before calling adjtime(2)

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

Scott Cheloha <scottcheloha@gmail.com> 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) {
>

No comments:

Post a Comment