commit 0a19fef470c7a204d19788cd5c1615055ae8a6a4
parent 672a2ccd3d3376eb2306e24c44a9561a2e7d485f
Author: Valentin Gosu <valentin.gosu@gmail.com>
Date: Tue, 25 Nov 2025 10:11:05 +0000
Bug 1980302 - Do not treat benchmarking IPs 198.18.0.0/15 as local r=sunil,necko-reviewers
This address space is reserved, but seems to be used for different things in the wild.
Chrome currently has no special handling, so this pref disables treating it as a local
address space. In the future we might treat it as a private address space instead.
Differential Revision: https://phabricator.services.mozilla.com/D273966
Diffstat:
3 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
@@ -14594,6 +14594,16 @@
value: true
mirror: always
+# When true, benchmarking IP addresses 198.18.X.X is treated as local
+# Depending on how this ends up being treated in the LNA spec, we might
+# change it to be in the private space, but for now it's disabled to
+# match Chrome LNA behaviour.
+- name: network.lna.benchmarking-is-local
+ type: RelaxedAtomicBool
+ value: false
+ mirror: always
+
+
# The proxy type. See nsIProtocolProxyService.idl
# PROXYCONFIG_DIRECT = 0
# PROXYCONFIG_MANUAL = 1
diff --git a/netwerk/dns/DNS.cpp b/netwerk/dns/DNS.cpp
@@ -250,8 +250,12 @@ nsILoadInfo::IPAddressSpace NetAddr::GetIpAddressSpace() const {
return overriddenIpAddressSpace;
}
- if (addr->IsBenchMarkingAddress() || addr->IsLoopbackAddr() ||
- addr->IsIPAddrAny()) {
+ if (StaticPrefs::network_lna_benchmarking_is_local() &&
+ addr->IsBenchMarkingAddress()) {
+ return nsILoadInfo::IPAddressSpace::Local;
+ }
+
+ if (addr->IsLoopbackAddr() || addr->IsIPAddrAny()) {
return nsILoadInfo::IPAddressSpace::Local;
}
diff --git a/netwerk/test/gtest/TestLocalNetworkAccess.cpp b/netwerk/test/gtest/TestLocalNetworkAccess.cpp
@@ -21,7 +21,7 @@ TEST(TestNetAddrLNAUtil, IPAddressSpaceCategorization)
100.64.0.0/10 | Carrier-Grade NAT | RFC6598 | private |
172.16.0.0/12 | Private Use | RFC1918 | private |
192.168.0.0/16 | Private Use | RFC1918 | private |
- 198.18.0.0/15 | Benchmarking | RFC2544 | local |
+ 198.18.0.0/15 | Benchmarking | RFC2544 | pref/local
169.254.0.0/16 | Link Local | RFC3927 | private |
::1/128 | IPv6 Loopback | RFC4291 | local |
fc00::/7 | Unique Local | RFC4193 | private |
@@ -30,6 +30,7 @@ TEST(TestNetAddrLNAUtil, IPAddressSpaceCategorization)
address space |
*--------------------------------------------------------------------------*/
using namespace mozilla::net;
+ using namespace mozilla;
struct TestCase {
const char* mIp;
@@ -40,8 +41,12 @@ TEST(TestNetAddrLNAUtil, IPAddressSpaceCategorization)
// Local IPv4
{"", nsILoadInfo::IPAddressSpace::Unknown},
{"127.0.0.1", nsILoadInfo::IPAddressSpace::Local},
- {"198.18.0.0", nsILoadInfo::IPAddressSpace::Local},
- {"198.19.255.255", nsILoadInfo::IPAddressSpace::Local},
+ {"198.18.0.0", StaticPrefs::network_lna_benchmarking_is_local()
+ ? nsILoadInfo::IPAddressSpace::Local
+ : nsILoadInfo::IPAddressSpace::Public},
+ {"198.19.255.255", StaticPrefs::network_lna_benchmarking_is_local()
+ ? nsILoadInfo::IPAddressSpace::Local
+ : nsILoadInfo::IPAddressSpace::Public},
// Private IPv4
{"10.0.0.1", nsILoadInfo::IPAddressSpace::Private},
@@ -124,7 +129,7 @@ TEST(TestNetAddrLNAUtil, DefaultAndOverrideTransitions)
"network.lna.address_space.public.override"},
// Local -> Private
- {"198.18.0.1", 9999, IPAddressSpace::Local, IPAddressSpace::Private,
+ {"127.0.0.1", 9999, IPAddressSpace::Local, IPAddressSpace::Private,
"network.lna.address_space.private.override"},
};