contrib/avahi/avahi-0.8-ipv6_race_condition_fix-1.patch
2021-02-19 22:25:44 +11:00

52 lines
2.4 KiB
Diff

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.");