Subject: bug#73873: ntpd segfaults at boot (caused by use of IPv6?)

From: Maxim Cournoyer <[email-masked]>
Date: Sat, 19 Oct 2024 17:07:19 +0900

Hello,

Maxim Cournoyer <[email-masked]> writes:

> Hi,
>
> After adjusting my system time in UEFI, I've had the ntpd daemon
> terminate with exit status 11, with the following message in
> /var/log/messages:
>
> Oct 19 08:44:17 localhost ntpd[1658]: Soliciting pool server 160.16.113.133
> Oct 19 08:44:17 localhost ntpd[1658]: 160.16.113.133 local addr <null> -> 192.168.10.119
> Oct 19 08:44:18 localhost ntpd[1658]: Soliciting pool server 133.243.238.163
> Oct 19 08:44:18 localhost ntpd[1658]: bind(25) AF_INET6 [2405:MASKED:af2b]:123 flags 0x11 failed: Cannot assign requested address
> Oct 19 08:44:18 localhost vmunix: [   44.506604] ntpd[1658]: segfault at 24 ip 000055d88235029b sp 00007fffdeb60e50 error 4 in ntpd[7f29b,55d8822e3000+86000] likely on CPU 0 (core 0, socket 0)
> Oct 19 08:44:18 localhost vmunix: [   44.506614] Code: 8b 04 25 28 00 00 00 48 89 44 24 08 31 c0 e8 3c 2e f9 ff 44 8b 28 48 89 c5 e8 61 9e ff ff 49 89 c4 48 85 db 0f 84 e5 00 00 00 <44> 0f b7 0b 66 41 83 f9 02 0f 84 f6 00 00 00 66 41 83 f
> 9 0a 74 57
> Oct 19 08:44:18 localhost ntpd[1658]: unable to create socket on eno1 (6) for [2405:MASKED:af2b]:123
> Oct 19 08:44:18 localhost shepherd[1]: Service ntpd (PID 1658) terminated with signal 11. 
> Oct 19 08:44:18 localhost shepherd[1]: Service ntpd has been disabled. 
> Oct 19 08:44:18 localhost shepherd[1]:   (Respawning too fast.)
>
> I've had to do:
>
> # herd enable ntpd
> # herd start ntpd
>
> To have it run again after the boot was completed.

It wasn't too longed before it crashed the same again, this time causing
Shepherd to use 100% CPU (1 core) doing almost only epoll_wait calls,
e.g.:

--8<---------------cut here---------------start------------->8---
[...]
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
1     epoll_wait(8, [], 8, 0)           = 0
[...]
--8<---------------cut here---------------end--------------->8---

-- 
Thanks,
Maxim