summaryrefslogtreecommitdiffstats
path: root/network/avahi/ipv6_race_condition_fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'network/avahi/ipv6_race_condition_fix.patch')
-rw-r--r--network/avahi/ipv6_race_condition_fix.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/network/avahi/ipv6_race_condition_fix.patch b/network/avahi/ipv6_race_condition_fix.patch
new file mode 100644
index 0000000000..3418b1a11c
--- /dev/null
+++ b/network/avahi/ipv6_race_condition_fix.patch
@@ -0,0 +1,51 @@
+Submitted By: Douglas R. Reno <renodr at linuxfromscratch dot org>
+Date: 2020-10-19
+Initial Package Version: 0.8
+Upstream Status: PR, not applied
+Origin: Upstream PR (github.com/lathiat/avahi/pull/309)
+Description: Fixes a race condition when multiple NICs are in use
+ when IPv6 is enabled. This will exhibit behavior where
+ messages about withdrawing address records, registering
+ access records, and new hostname announcements are
+ spammed to the log every second.
+
+diff -Naurp avahi-0.8.orig/avahi-core/server.c avahi-0.8/avahi-core/server.c
+--- avahi-0.8.orig/avahi-core/server.c 2020-02-16 21:41:24.939967558 -0600
++++ avahi-0.8/avahi-core/server.c 2020-10-19 11:07:22.054861721 -0500
+@@ -193,7 +193,7 @@ static void withdraw_rrset(AvahiServer *
+ withdraw_entry(s, e);
+ }
+
+-static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i) {
++static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i, int from_local_iface) {
+ AvahiEntry *e, *n;
+ int ours = 0, won = 0, lost = 0;
+
+@@ -210,7 +210,7 @@ static void incoming_probe(AvahiServer *
+ if (e->dead)
+ continue;
+
+- if ((cmp = avahi_record_lexicographical_compare(e->record, record)) == 0) {
++ if ((cmp = avahi_record_lexicographical_compare(e->record, record)) == 0 || from_local_iface) {
+ ours = 1;
+ break;
+ } else {
+@@ -639,7 +639,7 @@ static void handle_query_packet(AvahiSer
+ if (!avahi_key_is_pattern(record->key)) {
+ if (!from_local_iface)
+ reflect_probe(s, i, record);
+- incoming_probe(s, record, i);
++ incoming_probe(s, record, i, from_local_iface);
+ }
+
+ avahi_record_unref(record);
+@@ -961,8 +961,7 @@ static void dispatch_packet(AvahiServer
+ return;
+
+ /* We don't want to reflect local traffic, so we check if this packet is generated locally. */
+- if (s->config.enable_reflector)
+- from_local_iface = originates_from_local_iface(s, iface, src_address, port);
++ from_local_iface = originates_from_local_iface(s, iface, src_address, port);
+
+ if (avahi_dns_packet_check_valid_multicast(p) < 0) {
+ avahi_log_debug("Received invalid packet.");