On Tue, Mar 19, 2024 at 02:06:18PM +0100, Alexander Bluhm wrote: > Hi, > > ntpd crashed on my laptop. cstr->addr is NULL. According to > accounting it was running for a while. > > ntpd[43355] - _ntp __ 0.06 secs Thu Mar 14 10:57 (41:41:32.00) > ntpd[81566] -F root __ 0.28 secs Thu Mar 14 10:57 (41:39:28.00) > ntpd[5567] -DXT _ntp __ 0.02 secs Thu Mar 14 10:57 (41:39:28.00) > > -rw-r--r-- 1 root wheel 1583504 Mar 16 03:36 5567.core > > constraint.c > 204 cstr->last = now; > 205 cstr->state = STATE_QUERY_SENT; > 206 > 207 memset(&am, 0, sizeof(am)); > * 208 memcpy(&am.a, cstr->addr, sizeof(am.a)); > 209 am.synced = synced; > 210 > 211 iov[iov_cnt].iov_base = &am; > 212 iov[iov_cnt++].iov_len = sizeof(am); > > Core was generated by `ntpd'. > Program terminated with signal SIGSEGV, Segmentation fault. > #0 0x000006db7eb7fea0 in memcpy (dst0=0x7b224d08a0e8, src0=<optimized out>, > length=272) at /usr/src/lib/libc/string/memcpy.c:103 > 103 TLOOP(*(word *)dst = *(word *)src; src += wsize; dst += > wsize); > (gdb) bt > #0 0x000006db7eb7fea0 in memcpy (dst0=0x7b224d08a0e8, src0=<optimized out>, > length=272) at /usr/src/lib/libc/string/memcpy.c:103 > #1 0x000006d915308864 in constraint_query (cstr=0x6db756f4000, synced=0) at > /usr/src/usr.sbin/ntpd/constraint.c:208 > #2 0x000006d9152ff753 in ntp_main (nconf=<optimized out>, pw=<optimized > out>, argc=<optimized out>, argv=<optimized out>) > at /usr/src/usr.sbin/ntpd/ntp.c:330 > #3 0x000006d9152fd07a in main (argc=<optimized out>, argv=<optimized out>) > at /usr/src/usr.sbin/ntpd/ntpd.c:224 > (gdb) frame 1 > #1 0x000006d915308864 in constraint_query (cstr=0x6db756f4000, synced=0) at > /usr/src/usr.sbin/ntpd/constraint.c:208 > 208 memcpy(&am.a, cstr->addr, sizeof(am.a)); > > (gdb) print *cstr > value of type `constraint' requires 65704 bytes, which is more than > max-value-size > (gdb) print cstr->entry > $3 = {tqe_next = 0x0, tqe_prev = 0x6dba8b72000} > (gdb) print cstr->addr_head > $4 = {name = 0x6db60004850 "www.google.com", path = 0x6db600041c0 "/", a = > 0x0, pool = 2 '\002'} > (gdb) print cstr->addr > $5 = (struct ntp_addr *) 0x0 > (gdb) print cstr->senderrors > $6 = 0 > (gdb) print cstr->state > $7 = STATE_QUERY_SENT > (gdb) print cstr->id > $11 = 209 > (gdb) print cstr->fd > $12 = -1 > (gdb) print cstr->pid > $13 = 0 > (gdb) print cstr->ibuf > value of type `imsgbuf' requires 65600 bytes, which is more than > max-value-size > (gdb) print cstr->last > $14 = 146373 > (gdb) print cstr->constraint > $15 = 0 > (gdb) print cstr->dnstries > $16 = 0 > > bluhm >
I'll try to look into this, but the constraint state engine is very hard to follow... -Otto