On Thu, Jan 06, 2022 at 08:38:37AM +0100, Otto Moerbeek wrote:

> On Wed, Jan 05, 2022 at 02:19:28PM -0700, Theo de Raadt wrote:
> 
> > Otto Moerbeek <[email protected]> wrote:
> > 
> > > On Wed, Jan 05, 2022 at 11:45:36AM +0100, Matthias Schmidt wrote:
> > > 
> > > > >Synopsis:      ntpd constraint validation shows timestamp from 1899
> > > > >Environment:
> > > >         System      : OpenBSD 7.0
> > > >         Details     : OpenBSD 7.0-current (GENERIC.MP) #216: Mon Jan  3 
> > > > 16:04:47 MST 2022
> > > >                          
> > > > [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > > > 
> > > >         Architecture: OpenBSD.amd64
> > > >         Machine     : amd64
> > > > >Description:
> > > > 
> > > > Yesterday, the following log message from OpenNTPD appeared for the 
> > > > first and
> > > > only time in my logs:
> > > > 
> > > > Jan  4 19:35:04 sigma ntpd[72304]: maximum length exceeded
> > > > Jan  4 19:35:04 sigma ntpd[72304]: tls certificate not yet valid: 
> > > > 9.9.9.9 (9.9.9.9): not before 2021-07-27 00:00:00 UTC, now 1899-12-31 
> > > > 00:00:00 UTC
> > > > 
> > > > It seems like some hiccup during constraint TLS certificate validation.
> > > > 
> > > > Here are the log messages of the last two minutes BEFORE the lines above
> > > > appeared:
> > > > 
> > > > Jan  4 19:33:08 sigma ntpd[65131]: peer 134.76.249.201 now invalid
> > > > Jan  4 19:33:16 sigma ntpd[65131]: peer 141.2.22.74 now invalid
> > > > Jan  4 19:33:20 sigma ntpd[2066]: adjusting local clock by 0.468916s
> > > > Jan  4 19:33:20 sigma ntpd[65131]: clock is now unsynced
> > > > Jan  4 19:34:04 sigma ntpd[65131]: peer 134.76.249.201 now valid
> > > > Jan  4 19:34:22 sigma ntpd[2066]: adjusting local clock by 0.153686s
> > > > Jan  4 19:34:26 sigma ntpd[65131]: peer 134.76.249.201 now invalid
> > > > Jan  4 19:34:54 sigma ntpd[65131]: clock is now synced
> > > > Jan  4 19:34:54 sigma ntpd[65131]: constraint reply from 
> > > > 82.165.229.152: offset -0.891146
> > > > Jan  4 19:35:00 sigma ntpd[65131]: constraint reply from 82.165.229.87: 
> > > > offset -0.776174
> > > > 
> > > > The next time 9.9.9.9 appeared in the logs was around 15 minutes later:
> > > > 
> > > > Jan  4 19:50:43 sigma ntpd[65131]: constraint reply from 2620:fe::fe: 
> > > > offset -0.848819
> > > > Jan  4 19:50:43 sigma ntpd[65131]: constraint reply from 9.9.9.9: 
> > > > offset -0.872381
> > > 
> > > The 1899 time is the time taken from the http reply headers received.
> > > I suppose quad9 had a hickup and sent garbage.  Likely the strptime()
> > > call in ntpd/constraint.c went wrong but did not return an error in
> > > some way.  The answer to this contraint request was rejected. Other
> > > constraints worked apparantly and after a while quad9 was reporting a
> > > correct time in its http reply headers.
> > 
> > So in other words, the code worked precisely as intended.  The constraint
> > timestamp was not consumed, and the alert is simply amusing.
> > 
> 
> Yep.
> 
> Looking at the loop again and seeing the "maximum length exceeded" I
> think what has happened is that the loop exited without reading the
> Date: line and so no call to strptime() happened at all.
> 
> The code could be improved a bit by returning -1 in that case.
> 
>       -Otto
> 

Like this 

Index: constraint.c
===================================================================
RCS file: /cvs/src/usr.sbin/ntpd/constraint.c,v
retrieving revision 1.52
diff -u -p -r1.52 constraint.c
--- constraint.c        16 Jul 2021 13:59:10 -0000      1.52
+++ constraint.c        6 Jan 2022 07:43:52 -0000
@@ -1019,7 +1019,7 @@ httpsdate_request(struct httpsdate *http
                    &httpsdate->tls_tm) == NULL) {
                        log_warnx("unsupported date format");
                        free(line);
-                       return (-1);
+                       goto fail;
                }
 
                free(line);
@@ -1027,6 +1027,8 @@ httpsdate_request(struct httpsdate *http
  next:
                free(line);
        }
+       if (httpsdate->tls_tm.tm_year == 0)
+               goto fail;
 
        /*
         * Now manually check the validity of the certificate presented in the

Reply via email to