diff options
author | Ronan Pigott <ronan@rjp.ie> | 2023-03-27 09:43:58 -0700 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2023-04-05 13:27:16 +0200 |
commit | cad0fc7a1363b3221566d37092b5cc7576e65d1f (patch) | |
tree | 7a0a1abf762c55ee08be8e222ad9e6e1c180ddaf /src/resolve/resolved-dns-scope.c | |
parent | effd05626df09872e4474baa3c3c3952999e001c (diff) | |
download | systemd-cad0fc7a1363b3221566d37092b5cc7576e65d1f.tar.gz |
resolve: refuse mdns scope for ipv4 broadcast addresses
This query can never be answered, so let's no wait for it to timeout.
Diffstat (limited to 'src/resolve/resolved-dns-scope.c')
-rw-r--r-- | src/resolve/resolved-dns-scope.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c index c95875ec10..45f1d36311 100644 --- a/src/resolve/resolved-dns-scope.c +++ b/src/resolve/resolved-dns-scope.c @@ -556,6 +556,9 @@ static DnsScopeMatch match_subnet_reverse_lookups( if (s->family != AF_UNSPEC && f != s->family) return _DNS_SCOPE_MATCH_INVALID; /* Don't look for IPv4 addresses on LLMNR/mDNS over IPv6 and vice versa */ + if (in_addr_is_null(f, &ia)) + return DNS_SCOPE_NO; + LIST_FOREACH(addresses, a, s->link->addresses) { if (a->family != f) @@ -569,6 +572,10 @@ static DnsScopeMatch match_subnet_reverse_lookups( if (a->prefixlen == UCHAR_MAX) /* don't know subnet mask */ continue; + /* Don't send mDNS queries for the IPv4 broadcast address */ + if (f == AF_INET && in_addr_equal(f, &a->in_addr_broadcast, &ia) > 0) + return DNS_SCOPE_NO; + /* Check if the address is in the local subnet */ r = in_addr_prefix_covers(f, &a->in_addr, a->prefixlen, &ia); if (r < 0) |