diff options
Diffstat (limited to 'chrome_elf')
-rw-r--r-- | chrome_elf/blacklist/blacklist.cc | 11 | ||||
-rw-r--r-- | chrome_elf/blacklist/blacklist.h | 3 | ||||
-rw-r--r-- | chrome_elf/blacklist/test/blacklist_test.cc | 4 | ||||
-rw-r--r-- | chrome_elf/blacklist/test/blacklist_test_main_dll.def | 3 | ||||
-rw-r--r-- | chrome_elf/chrome_elf.def | 1 |
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, ¤t_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 |