On Mon, Dec 18, 2023 at 06:38:47PM +0100, Alexander Bluhm wrote:

> Hi,
> 
> for some days or weeks I see crashes of ntpd in accounting log on
> my laptop.
> 
> Program terminated with signal SIGSEGV, Segmentation fault.
> #0  log_sockaddr (sa=0x8) at /usr/src/usr.sbin/ntpd/util.c:159
> 159             if (getnameinfo(sa, SA_LEN(sa), buf, sizeof(buf), NULL, 0,
> (gdb) bt
> #0  log_sockaddr (sa=0x8) at /usr/src/usr.sbin/ntpd/util.c:159
> #1  0x00000b02fb57fc32 in constraint_msg_close (id=<optimized out>,
>     data=0xb058f8f3770 "\001", len=4)
>     at /usr/src/usr.sbin/ntpd/constraint.c:714
> #2  0x00000b02fb575f8a in ntp_dispatch_imsg ()
>     at /usr/src/usr.sbin/ntpd/ntp.c:516
> #3  0x00000b02fb5758b8 in ntp_main (nconf=<optimized out>, pw=<optimized out>,
>     argc=<optimized out>, argv=<optimized out>)
>     at /usr/src/usr.sbin/ntpd/ntp.c:378
> #4  0x00000b02fb57304a in main (argc=<optimized out>, argv=<optimized out>)
>     at /usr/src/usr.sbin/ntpd/ntpd.c:224
> 
> (gdb) frame 1
> #1  0x00000b02fb57fc32 in constraint_msg_close (id=<optimized out>,
>     data=0xb058f8f3770 "\001", len=4)
>     at /usr/src/usr.sbin/ntpd/constraint.c:714
> 714                         log_sockaddr((struct sockaddr *)
> (gdb) print cstr
> $2 = (struct constraint *) 0xb05b96ac000
> (gdb) print cstr->addr
> $3 = (struct ntp_addr *) 0x0
> 
> Logging a null pointer address does not work.
> 
>    711          if (fail) {
>    712                  log_debug("no constraint reply from %s"
>    713                      " received in time, next query %ds",
>    714                      log_sockaddr((struct sockaddr *)
>    715                      &cstr->addr->ss), CONSTRAINT_SCAN_INTERVAL);
> 
> bluhm
> 

This should prevent that and a few potenial similar cases.

        -Otto

Index: constraint.c
===================================================================
RCS file: /home/cvs/src/usr.sbin/ntpd/constraint.c,v
diff -u -p -r1.54 constraint.c
--- constraint.c        27 Nov 2022 13:19:00 -0000      1.54
+++ constraint.c        18 Dec 2023 18:34:19 -0000
@@ -467,10 +467,9 @@ priv_constraint_check_child(pid_t pid, i
                        if (sig != SIGTERM) {
                                signame = strsignal(sig) ?
                                    strsignal(sig) : "unknown";
-                               log_warnx("constraint %s; "
+                               log_warnx("constraint "
                                    "terminated with signal %d (%s)",
-                                   log_sockaddr((struct sockaddr *)
-                                   &cstr->addr->ss), sig, signame);
+                                   sig, signame);
                        }
                        fail = 1;
                }
@@ -679,9 +678,10 @@ constraint_msg_result(u_int32_t id, u_in
        offset = gettime_from_timeval(&tv[0]) -
            gettime_from_timeval(&tv[1]);
 
-       log_info("constraint reply from %s: offset %f",
-           log_sockaddr((struct sockaddr *)&cstr->addr->ss),
-           offset);
+       if (cstr->addr != NULL)
+               log_info("constraint reply from %s: offset %f",
+                   log_sockaddr((struct sockaddr *)&cstr->addr->ss),
+                   offset);
 
        cstr->state = STATE_REPLY_RECEIVED;
        cstr->last = getmonotime();
@@ -710,10 +710,11 @@ constraint_msg_close(u_int32_t id, u_int
        memcpy(&fail, data, len);
 
        if (fail) {
-               log_debug("no constraint reply from %s"
-                   " received in time, next query %ds",
-                   log_sockaddr((struct sockaddr *)
-                   &cstr->addr->ss), CONSTRAINT_SCAN_INTERVAL);
+               if (cstr->addr != NULL)
+                       log_debug("no constraint reply from %s"
+                           " received in time, next query %ds",
+                           log_sockaddr((struct sockaddr *)
+                           &cstr->addr->ss), CONSTRAINT_SCAN_INTERVAL);
                
                cnt = 0;
                TAILQ_FOREACH(tmp, &conf->constraints, entry)

Reply via email to