tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mmodules/libpref/init/StaticPrefList.yaml | 10++++++++++
Mnetwerk/dns/DNS.cpp | 8++++++--
Mnetwerk/test/gtest/TestLocalNetworkAccess.cpp | 13+++++++++----
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"}, };