summaryrefslogtreecommitdiffstats
path: root/chrome_elf
diff options
context:
space:
mode:
authorrobertshield@chromium.org <robertshield@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-01 01:23:24 +0000
committerrobertshield@chromium.org <robertshield@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-01 01:23:24 +0000
commit0884a315e82ec12d1ebc336050f2e24b611338d5 (patch)
tree296d42d0a130bab47d64c7c5e2b607237e496ea0 /chrome_elf
parent8834a3b3a4d52040e9e8436e20fa2dd0536b82a4 (diff)
downloadchromium_src-0884a315e82ec12d1ebc336050f2e24b611338d5.zip
chromium_src-0884a315e82ec12d1ebc336050f2e24b611338d5.tar.gz
chromium_src-0884a315e82ec12d1ebc336050f2e24b611338d5.tar.bz2
Unify browser process type checks in Chrome ELF.
Use both IsSandboxed and command line flag. BUG=329023 TEST=chrome_elf_unittests Review URL: https://codereview.chromium.org/181863002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@254308 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_elf')
-rw-r--r--chrome_elf/blacklist/blacklist.cc12
-rw-r--r--chrome_elf/chrome_elf_util.cc16
-rw-r--r--chrome_elf/chrome_elf_util.h4
-rw-r--r--chrome_elf/create_file/chrome_create_file.cc3
4 files changed, 22 insertions, 13 deletions
diff --git a/chrome_elf/blacklist/blacklist.cc b/chrome_elf/blacklist/blacklist.cc
index 73383d5..5ce3773 100644
--- a/chrome_elf/blacklist/blacklist.cc
+++ b/chrome_elf/blacklist/blacklist.cc
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "chrome_elf/blacklist/blacklist_interceptions.h"
#include "chrome_elf/chrome_elf_constants.h"
+#include "chrome_elf/chrome_elf_util.h"
#include "sandbox/win/src/interception_internal.h"
#include "sandbox/win/src/internal_types.h"
#include "sandbox/win/src/sandbox_utils.h"
@@ -141,17 +142,6 @@ class OSInfo {
DISALLOW_COPY_AND_ASSIGN(OSInfo);
};
-bool IsNonBrowserProcess() {
- typedef bool (*IsSandboxedProcessFunc)();
- IsSandboxedProcessFunc is_sandboxed_process =
- reinterpret_cast<IsSandboxedProcessFunc>(
- GetProcAddress(GetModuleHandle(NULL), "IsSandboxedProcess"));
- if (is_sandboxed_process && is_sandboxed_process())
- return true;
-
- return false;
-}
-
// Record that the thunk setup completed succesfully and close the registry
// key handle since it is no longer needed.
void RecordSuccessfulThunkSetup(HKEY* key) {
diff --git a/chrome_elf/chrome_elf_util.cc b/chrome_elf/chrome_elf_util.cc
index fc99ae4..a547d0b 100644
--- a/chrome_elf/chrome_elf_util.cc
+++ b/chrome_elf/chrome_elf_util.cc
@@ -191,3 +191,19 @@ bool ReportingIsEnforcedByPolicy(bool* breakpad_enabled) {
return false;
}
+
+bool IsNonBrowserProcess() {
+ typedef bool (*IsSandboxedProcessFunc)();
+ IsSandboxedProcessFunc is_sandboxed_process_func =
+ reinterpret_cast<IsSandboxedProcessFunc>(
+ GetProcAddress(GetModuleHandle(NULL), "IsSandboxedProcess"));
+ bool is_sandboxed_process =
+ is_sandboxed_process_func && is_sandboxed_process_func();
+
+ // TODO(robertshield): Drop the command line check when we drop support for
+ // enabling chrome_elf in unsandboxed processes.
+ wchar_t* command_line = GetCommandLine();
+ bool has_process_type_flag = command_line && wcsstr(command_line, L"--type");
+
+ return (has_process_type_flag || is_sandboxed_process);
+}
diff --git a/chrome_elf/chrome_elf_util.h b/chrome_elf/chrome_elf_util.h
index a81e54f..e87dc7f 100644
--- a/chrome_elf/chrome_elf_util.h
+++ b/chrome_elf/chrome_elf_util.h
@@ -24,4 +24,8 @@ bool AreUsageStatsEnabled(const wchar_t* exe_path);
// if stats collecting is permitted by this policy and false if not.
bool ReportingIsEnforcedByPolicy(bool* breakpad_enabled);
+// Returns true if invoked in a Chrome process other than the main browser
+// process. False otherwise.
+bool IsNonBrowserProcess();
+
#endif // CHROME_ELF_CHROME_ELF_UTIL_H_
diff --git a/chrome_elf/create_file/chrome_create_file.cc b/chrome_elf/create_file/chrome_create_file.cc
index 1b8515f..9521ecb2 100644
--- a/chrome_elf/create_file/chrome_create_file.cc
+++ b/chrome_elf/create_file/chrome_create_file.cc
@@ -254,8 +254,7 @@ HANDLE CreateFileNTDLL(
bool ShouldBypass(LPCWSTR file_path) {
// Do not redirect in non-browser processes.
- wchar_t* command_line = ::GetCommandLine();
- if (command_line && wcsstr(command_line, L"--type"))
+ if (IsNonBrowserProcess())
return false;
// If the shell functions are not present, forward the call to kernel32.