summaryrefslogtreecommitdiffstats
path: root/chrome_elf
diff options
context:
space:
mode:
authorcsharp@chromium.org <csharp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-15 00:32:30 +0000
committercsharp@chromium.org <csharp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-15 00:32:30 +0000
commit174213aed78f7bd2c654ab3797dec7485593402d (patch)
treef72dc17087713e328362977a29cbfa9f294511d2 /chrome_elf
parente0a4d737b5a2e1efb828e371f905aced30ea7904 (diff)
downloadchromium_src-174213aed78f7bd2c654ab3797dec7485593402d.zip
chromium_src-174213aed78f7bd2c654ab3797dec7485593402d.tar.gz
chromium_src-174213aed78f7bd2c654ab3797dec7485593402d.tar.bz2
Add a UMA stat to track if the Browser blacklist is Set on the Renderer
This shouldn't be happening, but we got some crash reports suggesting it does. Unable to repo locally so this stat will verify it does occur and then can be used to verify our fixes actually fix it. TBR=asvitkine@chromium.org BUG=329023 Review URL: https://codereview.chromium.org/166953002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251454 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_elf')
-rw-r--r--chrome_elf/blacklist/blacklist.cc11
-rw-r--r--chrome_elf/blacklist/blacklist.h3
-rw-r--r--chrome_elf/blacklist/test/blacklist_test.cc4
-rw-r--r--chrome_elf/blacklist/test/blacklist_test_main_dll.def3
-rw-r--r--chrome_elf/chrome_elf.def1
5 files changed, 21 insertions, 1 deletions
diff --git a/chrome_elf/blacklist/blacklist.cc b/chrome_elf/blacklist/blacklist.cc
index ea140c4..32d3cb2 100644
--- a/chrome_elf/blacklist/blacklist.cc
+++ b/chrome_elf/blacklist/blacklist.cc
@@ -60,6 +60,10 @@ enum WOW64Status {
WOW64_UNKNOWN,
};
+// Record if the blacklist was successfully initialized so processes can easily
+// determine if the blacklist is enabled for them.
+bool g_blacklist_initialized = false;
+
WOW64Status GetWOW64StatusForCurrentProcess() {
typedef BOOL (WINAPI* IsWow64ProcessFunc)(HANDLE, PBOOL);
IsWow64ProcessFunc is_wow64_process = reinterpret_cast<IsWow64ProcessFunc>(
@@ -272,6 +276,10 @@ int BlacklistSize() {
return size;
}
+bool IsBlacklistInitialized() {
+ return g_blacklist_initialized;
+}
+
bool AddDllToBlacklist(const wchar_t* dll_name) {
int blacklist_size = BlacklistSize();
// We need to leave one space at the end for the null pointer.
@@ -373,6 +381,9 @@ bool Initialize(bool force) {
}
#endif
+ // Record that we have initialized the blacklist.
+ g_blacklist_initialized = true;
+
BYTE* thunk_storage = reinterpret_cast<BYTE*>(&g_thunk_storage);
// Mark the thunk storage as readable and writeable, since we
diff --git a/chrome_elf/blacklist/blacklist.h b/chrome_elf/blacklist/blacklist.h
index 5237a5c..2e21f20 100644
--- a/chrome_elf/blacklist/blacklist.h
+++ b/chrome_elf/blacklist/blacklist.h
@@ -61,6 +61,9 @@ bool ResetBeacon();
// Return the size of the current blacklist.
int BlacklistSize();
+// Returns if true if the blacklist has been initialized.
+extern "C" bool IsBlacklistInitialized();
+
// Adds the given dll name to the blacklist. Returns true if the dll name is in
// the blacklist when this returns, false on error. Note that this will copy
// |dll_name| and will leak it on exit if the string is not subsequently removed
diff --git a/chrome_elf/blacklist/test/blacklist_test.cc b/chrome_elf/blacklist/test/blacklist_test.cc
index 3a881ad..39db737 100644
--- a/chrome_elf/blacklist/test/blacklist_test.cc
+++ b/chrome_elf/blacklist/test/blacklist_test.cc
@@ -32,6 +32,7 @@ extern "C" {
// functions on the test blacklist dll, not the ones linked into the test
// executable itself.
__declspec(dllimport) bool TestDll_AddDllToBlacklist(const wchar_t* dll_name);
+__declspec(dllimport) bool TestDLL_IsBlacklistInitialized();
__declspec(dllimport) bool TestDll_RemoveDllFromBlacklist(
const wchar_t* dll_name);
}
@@ -120,6 +121,9 @@ TEST_F(BlacklistTest, LoadBlacklistedLibrary) {
base::FilePath current_dir;
ASSERT_TRUE(PathService::Get(base::DIR_EXE, &current_dir));
+ // Ensure that the blacklist is loaded.
+ ASSERT_TRUE(TestDLL_IsBlacklistInitialized());
+
// Test that an un-blacklisted DLL can load correctly.
base::ScopedNativeLibrary dll1(current_dir.Append(kTestDllName1));
EXPECT_TRUE(dll1.is_valid());
diff --git a/chrome_elf/blacklist/test/blacklist_test_main_dll.def b/chrome_elf/blacklist/test/blacklist_test_main_dll.def
index 63522a0..82e0f0e 100644
--- a/chrome_elf/blacklist/test/blacklist_test_main_dll.def
+++ b/chrome_elf/blacklist/test/blacklist_test_main_dll.def
@@ -6,5 +6,6 @@ LIBRARY "blacklist_test_main_dll.dll"
EXPORTS
TestDll_AddDllToBlacklist=AddDllToBlacklist
+ TestDLL_IsBlacklistInitialized=IsBlacklistInitialized
TestDll_RemoveDllFromBlacklist=RemoveDllFromBlacklist
- InitBlacklistTestDll
+ InitBlacklistTestDll \ No newline at end of file
diff --git a/chrome_elf/chrome_elf.def b/chrome_elf/chrome_elf.def
index 3e88cfa..ee9808f 100644
--- a/chrome_elf/chrome_elf.def
+++ b/chrome_elf/chrome_elf.def
@@ -6,4 +6,5 @@ LIBRARY "chrome_elf.dll"
EXPORTS
CreateFileW=CreateFileWRedirect
+ IsBlacklistInitialized
SignalChromeElf