Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: chrome/browser/chrome_elf_init_win.cc

Issue 272213006: Switching the no-finch default behavior to enable the blacklist (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Finch blacklist is now added to the hardcoded blacklist. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/chrome_elf_init_win.h ('k') | chrome_elf/blacklist/blacklist.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/metrics/field_trial.h" 6 #include "base/metrics/field_trial.h"
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/metrics/sparse_histogram.h" 8 #include "base/metrics/sparse_histogram.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "base/win/registry.h" 10 #include "base/win/registry.h"
11 #include "chrome/browser/chrome_elf_init_win.h" 11 #include "chrome/browser/chrome_elf_init_win.h"
12 #include "chrome_elf/blacklist/blacklist.h" 12 #include "chrome_elf/blacklist/blacklist.h"
13 #include "chrome_elf/chrome_elf_constants.h" 13 #include "chrome_elf/chrome_elf_constants.h"
14 #include "chrome_elf/dll_hash/dll_hash.h" 14 #include "chrome_elf/dll_hash/dll_hash.h"
15 #include "components/variations/variations_associated_data.h"
15 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
16 #include "version.h" // NOLINT 17 #include "version.h" // NOLINT
17 18
19 const char kBrowserBlacklistTrialName[] = "BrowserBlacklist";
20 const char kBrowserBlacklistTrialDisabledGroupName[] = "NoBlacklist";
21
18 namespace { 22 namespace {
19 23
20 const char kBrowserBlacklistTrialName[] = "BrowserBlacklist";
21 const char kBrowserBlacklistTrialEnabledGroupName[] = "Enabled";
22
23 // How long to wait, in seconds, before reporting for the second (and last 24 // How long to wait, in seconds, before reporting for the second (and last
24 // time), what dlls were blocked from the browser process. 25 // time), what dlls were blocked from the browser process.
25 const int kBlacklistReportingDelaySec = 600; 26 const int kBlacklistReportingDelaySec = 600;
26 27
27 // This enum is used to define the buckets for an enumerated UMA histogram. 28 // This enum is used to define the buckets for an enumerated UMA histogram.
28 // Hence, 29 // Hence,
29 // (a) existing enumerated constants should never be deleted or reordered, and 30 // (a) existing enumerated constants should never be deleted or reordered, and
30 // (b) new constants should only be appended in front of 31 // (b) new constants should only be appended in front of
31 // BLACKLIST_SETUP_EVENT_MAX. 32 // BLACKLIST_SETUP_EVENT_MAX.
32 enum BlacklistSetupEventType { 33 enum BlacklistSetupEventType {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 int uma_hash = DllNameToHash(dll_name_utf8); 76 int uma_hash = DllNameToHash(dll_name_utf8);
76 77
77 UMA_HISTOGRAM_SPARSE_SLOWLY("Blacklist.Blocked", uma_hash); 78 UMA_HISTOGRAM_SPARSE_SLOWLY("Blacklist.Blocked", uma_hash);
78 } 79 }
79 } 80 }
80 81
81 } // namespace 82 } // namespace
82 83
83 void InitializeChromeElf() { 84 void InitializeChromeElf() {
84 if (base::FieldTrialList::FindFullName(kBrowserBlacklistTrialName) == 85 if (base::FieldTrialList::FindFullName(kBrowserBlacklistTrialName) ==
85 kBrowserBlacklistTrialEnabledGroupName) { 86 kBrowserBlacklistTrialDisabledGroupName) {
86 BrowserBlacklistBeaconSetup();
87 } else {
88 // Disable the blacklist for all future runs by removing the beacon. 87 // Disable the blacklist for all future runs by removing the beacon.
89 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER); 88 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER);
90 blacklist_registry_key.DeleteKey(blacklist::kRegistryBeaconPath); 89 blacklist_registry_key.DeleteKey(blacklist::kRegistryBeaconPath);
90 } else {
91 AddFinchBlacklistToRegistry();
92 BrowserBlacklistBeaconSetup();
91 } 93 }
92 94
93 // Report all successful blacklist interceptions. 95 // Report all successful blacklist interceptions.
94 ReportSuccessfulBlocks(); 96 ReportSuccessfulBlocks();
95 97
96 // Schedule another task to report all sucessful interceptions later. 98 // Schedule another task to report all sucessful interceptions later.
97 // This time delay should be long enough to catch any dlls that attempt to 99 // This time delay should be long enough to catch any dlls that attempt to
98 // inject after Chrome has started up. 100 // inject after Chrome has started up.
99 content::BrowserThread::PostDelayedTask( 101 content::BrowserThread::PostDelayedTask(
100 content::BrowserThread::UI, 102 content::BrowserThread::UI,
101 FROM_HERE, 103 FROM_HERE,
102 base::Bind(&ReportSuccessfulBlocks), 104 base::Bind(&ReportSuccessfulBlocks),
103 base::TimeDelta::FromSeconds(kBlacklistReportingDelaySec)); 105 base::TimeDelta::FromSeconds(kBlacklistReportingDelaySec));
104 } 106 }
105 107
108 void AddFinchBlacklistToRegistry() {
109 std::map<std::string, std::string> params;
110 if (chrome_variations::GetVariationParams(kBrowserBlacklistTrialName,
111 &params)) {
112 std::map<std::string, std::string>::iterator it = params.begin();
113 while (it != params.end()) {
114 base::win::RegKey finch_blacklist_registry_key(HKEY_CURRENT_USER,
115 blacklist::kRegistryFinchListPath,
116 KEY_QUERY_VALUE | KEY_SET_VALUE);
117
118 // No point in trying to continue if the registry key isn't valid.
119 if (!finch_blacklist_registry_key.Valid())
120 return;
121
122 // TODO: use ansi or utf8?
123 char* name_str = (it->first).c_str();
124 char* val_str = (it->second).c_str();
125 size_t name_len = MultiByteToWideChar(CP_UTF8, 0,name_str,-1, NULL, 0);
126 size_t val_len = MultiByteToWideChar(CP_UTF8, 0,val_str, -1, NULL, 0);
127 wchar_t* name = new wchar_t[name_len];
128 wchar_t* val = new wchar_t[val_len];
129 MultiByteToWideChar(CP_UTF8, 0, name_str, -1, name, name_len);
130 MultiByteToWideChar(CP_UTF8, 0, val_str, -1, value, val_len);
131 finch_blacklist_registry_key.WriteValue(name, val);
132
133 delete[] name;
134 delete[] val;
135
136 ++it;
137 }
138 }
139 }
140
106 void BrowserBlacklistBeaconSetup() { 141 void BrowserBlacklistBeaconSetup() {
107 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER, 142 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER,
108 blacklist::kRegistryBeaconPath, 143 blacklist::kRegistryBeaconPath,
109 KEY_QUERY_VALUE | KEY_SET_VALUE); 144 KEY_QUERY_VALUE | KEY_SET_VALUE);
110 145
111 // No point in trying to continue if the registry key isn't valid. 146 // No point in trying to continue if the registry key isn't valid.
112 if (!blacklist_registry_key.Valid()) 147 if (!blacklist_registry_key.Valid())
113 return; 148 return;
114 149
115 // Record the results of the last blacklist setup. 150 // Record the results of the last blacklist setup.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 LONG set_state = blacklist_registry_key.WriteValue( 188 LONG set_state = blacklist_registry_key.WriteValue(
154 blacklist::kBeaconState, 189 blacklist::kBeaconState,
155 blacklist::BLACKLIST_ENABLED); 190 blacklist::BLACKLIST_ENABLED);
156 191
157 // Only report the blacklist as getting setup when both registry writes 192 // Only report the blacklist as getting setup when both registry writes
158 // succeed, since otherwise the blacklist wasn't properly setup. 193 // succeed, since otherwise the blacklist wasn't properly setup.
159 if (set_version == ERROR_SUCCESS && set_state == ERROR_SUCCESS) 194 if (set_version == ERROR_SUCCESS && set_state == ERROR_SUCCESS)
160 RecordBlacklistSetupEvent(BLACKLIST_SETUP_ENABLED); 195 RecordBlacklistSetupEvent(BLACKLIST_SETUP_ENABLED);
161 } 196 }
162 } 197 }
OLDNEW
« no previous file with comments | « chrome/browser/chrome_elf_init_win.h ('k') | chrome_elf/blacklist/blacklist.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698