Richard Pospesel pushed to branch tor-browser-102.8.0esr-12.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
3dd7b20a
by Pier Angelo Vendrame at 2023-02-22T09:55:31+01:00
-
e8982629
by Pier Angelo Vendrame at 2023-02-22T09:59:38+01:00
8 changed files:
- + netwerk/system/LinkServiceCommon.cpp
- + netwerk/system/LinkServiceCommon.h
- netwerk/system/android/nsAndroidNetworkLinkService.cpp
- netwerk/system/linux/nsNetworkLinkService.cpp
- netwerk/system/mac/nsNetworkLinkService.mm
- netwerk/system/moz.build
- netwerk/system/netlink/NetlinkService.cpp
- netwerk/system/win32/nsNotifyAddrListener.cpp
Changes:
1 | +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
2 | +/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
3 | +/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4 | + * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5 | + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
6 | + |
|
7 | +#include "LinkServiceCommon.h"
|
|
8 | + |
|
9 | +#include "mozilla/Maybe.h"
|
|
10 | +#include "mozilla/SHA1.h"
|
|
11 | +#include "mozilla/TimeStamp.h"
|
|
12 | +#include "nsID.h"
|
|
13 | + |
|
14 | +using namespace mozilla;
|
|
15 | + |
|
16 | +void SeedNetworkId(SHA1Sum& aSha1) {
|
|
17 | + static Maybe<nsID> seed = ([]() {
|
|
18 | + Maybe<nsID> uuid(std::in_place);
|
|
19 | + if (NS_FAILED(nsID::GenerateUUIDInPlace(*uuid))) {
|
|
20 | + uuid.reset();
|
|
21 | + }
|
|
22 | + return uuid;
|
|
23 | + })();
|
|
24 | + if (seed) {
|
|
25 | + aSha1.update(seed.ptr(), sizeof(*seed));
|
|
26 | + } else {
|
|
27 | + TimeStamp timestamp = TimeStamp::ProcessCreation();
|
|
28 | + aSha1.update(×tamp, sizeof(timestamp));
|
|
29 | + }
|
|
30 | +} |
1 | +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
2 | +/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
3 | +/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4 | + * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5 | + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
6 | + |
|
7 | +#ifndef LINK_SERVICE_COMMON_H_
|
|
8 | +#define LINK_SERVICE_COMMON_H_
|
|
9 | + |
|
10 | +namespace mozilla {
|
|
11 | +class SHA1Sum;
|
|
12 | +}
|
|
13 | + |
|
14 | +// Add a seed to the computed network ID to prevent user linkability.
|
|
15 | +void SeedNetworkId(mozilla::SHA1Sum& aSha1);
|
|
16 | + |
|
17 | +#endif // LINK_SERVICE_COMMON_H_ |
... | ... | @@ -123,11 +123,15 @@ nsAndroidNetworkLinkService::GetLinkType(uint32_t* aLinkType) { |
123 | 123 | |
124 | 124 | NS_IMETHODIMP
|
125 | 125 | nsAndroidNetworkLinkService::GetNetworkID(nsACString& aNetworkID) {
|
126 | +#ifdef BASE_BROWSER
|
|
127 | + aNetworkID.Truncate();
|
|
128 | +#else
|
|
126 | 129 | if (!mNetlinkSvc) {
|
127 | 130 | return NS_ERROR_NOT_AVAILABLE;
|
128 | 131 | }
|
129 | 132 | |
130 | 133 | mNetlinkSvc->GetNetworkID(aNetworkID);
|
134 | +#endif
|
|
131 | 135 | return NS_OK;
|
132 | 136 | }
|
133 | 137 |
... | ... | @@ -50,11 +50,15 @@ nsNetworkLinkService::GetLinkType(uint32_t* aLinkType) { |
50 | 50 | |
51 | 51 | NS_IMETHODIMP
|
52 | 52 | nsNetworkLinkService::GetNetworkID(nsACString& aNetworkID) {
|
53 | +#ifdef BASE_BROWSER
|
|
54 | + aNetworkID.Truncate();
|
|
55 | +#else
|
|
53 | 56 | if (!mNetlinkSvc) {
|
54 | 57 | return NS_ERROR_NOT_AVAILABLE;
|
55 | 58 | }
|
56 | 59 | |
57 | 60 | mNetlinkSvc->GetNetworkID(aNetworkID);
|
61 | +#endif
|
|
58 | 62 | return NS_OK;
|
59 | 63 | }
|
60 | 64 |
... | ... | @@ -35,6 +35,7 @@ |
35 | 35 | #include "mozilla/Telemetry.h"
|
36 | 36 | #include "nsNetworkLinkService.h"
|
37 | 37 | #include "../../base/IPv6Utils.h"
|
38 | +#include "../LinkServiceCommon.h"
|
|
38 | 39 | #include "../NetworkLinkServiceDefines.h"
|
39 | 40 | |
40 | 41 | #import <Cocoa/Cocoa.h>
|
... | ... | @@ -122,8 +123,12 @@ nsNetworkLinkService::GetLinkType(uint32_t* aLinkType) { |
122 | 123 | |
123 | 124 | NS_IMETHODIMP
|
124 | 125 | nsNetworkLinkService::GetNetworkID(nsACString& aNetworkID) {
|
126 | +#ifdef BASE_BROWSER
|
|
127 | + aNetworkID.Truncate();
|
|
128 | +#else
|
|
125 | 129 | MutexAutoLock lock(mMutex);
|
126 | 130 | aNetworkID = mNetworkId;
|
131 | +#endif
|
|
127 | 132 | return NS_OK;
|
128 | 133 | }
|
129 | 134 | |
... | ... | @@ -600,11 +605,8 @@ void nsNetworkLinkService::calculateNetworkIdInternal(void) { |
600 | 605 | bool found6 = IPv6NetworkId(&sha1);
|
601 | 606 | |
602 | 607 | if (found4 || found6) {
|
603 | - // This 'addition' could potentially be a fixed number from the
|
|
604 | - // profile or something.
|
|
605 | - nsAutoCString addition("local-rubbish");
|
|
606 | 608 | nsAutoCString output;
|
607 | - sha1.update(addition.get(), addition.Length());
|
|
609 | + SeedNetworkId(sha1);
|
|
608 | 610 | uint8_t digest[SHA1Sum::kHashSize];
|
609 | 611 | sha1.finish(digest);
|
610 | 612 | nsAutoCString newString(reinterpret_cast<char*>(digest), SHA1Sum::kHashSize);
|
... | ... | @@ -15,3 +15,9 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "android": |
15 | 15 | |
16 | 16 | elif CONFIG["OS_ARCH"] == "Linux":
|
17 | 17 | DIRS += ["linux", "netlink"]
|
18 | + |
|
19 | +SOURCES += [
|
|
20 | + "LinkServiceCommon.cpp",
|
|
21 | +]
|
|
22 | + |
|
23 | +FINAL_LIBRARY = "xul" |
... | ... | @@ -18,6 +18,7 @@ |
18 | 18 | #include "nsPrintfCString.h"
|
19 | 19 | #include "mozilla/Logging.h"
|
20 | 20 | #include "../../base/IPv6Utils.h"
|
21 | +#include "../LinkServiceCommon.h"
|
|
21 | 22 | #include "../NetworkLinkServiceDefines.h"
|
22 | 23 | |
23 | 24 | #include "mozilla/Base64.h"
|
... | ... | @@ -1812,11 +1813,8 @@ void NetlinkService::CalculateNetworkID() { |
1812 | 1813 | bool found6 = CalculateIDForFamily(AF_INET6, &sha1);
|
1813 | 1814 | |
1814 | 1815 | if (found4 || found6) {
|
1815 | - // This 'addition' could potentially be a fixed number from the
|
|
1816 | - // profile or something.
|
|
1817 | - nsAutoCString addition("local-rubbish");
|
|
1818 | 1816 | nsAutoCString output;
|
1819 | - sha1.update(addition.get(), addition.Length());
|
|
1817 | + SeedNetworkId(sha1);
|
|
1820 | 1818 | uint8_t digest[SHA1Sum::kHashSize];
|
1821 | 1819 | sha1.finish(digest);
|
1822 | 1820 | nsAutoCString newString(reinterpret_cast<char*>(digest),
|
... | ... | @@ -1877,8 +1875,12 @@ void NetlinkService::CalculateNetworkID() { |
1877 | 1875 | }
|
1878 | 1876 | |
1879 | 1877 | void NetlinkService::GetNetworkID(nsACString& aNetworkID) {
|
1878 | +#ifdef BASE_BROWSER
|
|
1879 | + aNetworkID.Truncate();
|
|
1880 | +#else
|
|
1880 | 1881 | MutexAutoLock lock(mMutex);
|
1881 | 1882 | aNetworkID = mNetworkId;
|
1883 | +#endif
|
|
1882 | 1884 | }
|
1883 | 1885 | |
1884 | 1886 | nsresult NetlinkService::GetDnsSuffixList(nsTArray<nsCString>& aDnsSuffixList) {
|
... | ... | @@ -45,6 +45,7 @@ |
45 | 45 | #include "mozilla/Base64.h"
|
46 | 46 | #include "mozilla/ScopeExit.h"
|
47 | 47 | #include "mozilla/Telemetry.h"
|
48 | +#include "../LinkServiceCommon.h"
|
|
48 | 49 | #include <iptypes.h>
|
49 | 50 | #include <iphlpapi.h>
|
50 | 51 | |
... | ... | @@ -104,8 +105,12 @@ nsNotifyAddrListener::GetLinkType(uint32_t* aLinkType) { |
104 | 105 | |
105 | 106 | NS_IMETHODIMP
|
106 | 107 | nsNotifyAddrListener::GetNetworkID(nsACString& aNetworkID) {
|
108 | +#ifdef BASE_BROWSER
|
|
109 | + aNetworkID.Truncate();
|
|
110 | +#else
|
|
107 | 111 | MutexAutoLock lock(mMutex);
|
108 | 112 | aNetworkID = mNetworkId;
|
113 | +#endif
|
|
109 | 114 | return NS_OK;
|
110 | 115 | }
|
111 | 116 | |
... | ... | @@ -248,7 +253,7 @@ void nsNotifyAddrListener::calculateNetworkId(void) { |
248 | 253 | nsAutoCString output;
|
249 | 254 | SHA1Sum::Hash digest;
|
250 | 255 | HashSortedNetworkIds(nwGUIDS, sha1);
|
251 | - |
|
256 | + SeedNetworkId(sha1);
|
|
252 | 257 | sha1.finish(digest);
|
253 | 258 | nsCString newString(reinterpret_cast<char*>(digest), SHA1Sum::kHashSize);
|
254 | 259 | nsresult rv = Base64Encode(newString, output);
|