summaryrefslogtreecommitdiffstats
path: root/source/n/ntp/fix_ipv6_locallink_regression.diff
diff options
context:
space:
mode:
Diffstat (limited to 'source/n/ntp/fix_ipv6_locallink_regression.diff')
-rw-r--r--source/n/ntp/fix_ipv6_locallink_regression.diff37
1 files changed, 37 insertions, 0 deletions
diff --git a/source/n/ntp/fix_ipv6_locallink_regression.diff b/source/n/ntp/fix_ipv6_locallink_regression.diff
new file mode 100644
index 000000000..2eb44ad63
--- /dev/null
+++ b/source/n/ntp/fix_ipv6_locallink_regression.diff
@@ -0,0 +1,37 @@
+This patch fixes a regression introduced in ntpd revision 1.4040.1.4[1].
+The first ntpd release to be affected was 4.2.8p18.
+
+If the IPv6 link-local interface was not ready for binding on the first
+attempt, ntpd would segfault in update_interfaces(). The cause was the
+inadvertent referencing of the endpoint returned by create_interface() (ep,
+which is NULL on error) rather than the endpoint which contained the address
+information (ep2).
+
+In the patch author's experience, the segfault would only occur when ntpd
+was started as part of the boot sequence. Most - but not all - boots were
+affected. Evidently it could happen that the timing of ntpd's start up was
+delayed enough that the IPv6 link-local interface was ready for the bind()
+call when it was first issued by open_socket() via create_interface().
+
+No segfaults were observed by the patch's author when starting ntpd manually
+after logging in.
+
+[1] [Bug 3913] Avoid duplicate IPv6 link-local manycast associations.
+ Complete the switch from struct interface to endpt.
+
+--- a/ntp-4.2.8p18/ntpd/ntp_io.c 2024-05-07 20:51:17.000000000 +0930
++++ b/ntp-4.2.8p18/ntpd/ntp_io.c 2024-07-16 22:06:48.873953452 +0930
+@@ -1921,11 +1921,11 @@
+ }
+ else {
+ DPRINT_INTERFACE(3,
+- (ep, "updating ", " new - FAILED"));
++ (ep2, "updating ", " new - FAILED"));
+
+ msyslog(LOG_ERR,
+ "cannot bind address %s",
+- stoa(&ep->sin));
++ stoa(&ep2->sin));
+ }
+ free(ep2);
+ }