summaryrefslogtreecommitdiffstats
path: root/chrome/plugin
diff options
context:
space:
mode:
authorcpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-30 20:40:45 +0000
committercpu@chromium.org <cpu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-30 20:40:45 +0000
commite29b96a75e3d7209226f77c47310a7773c31a116 (patch)
tree1c96c3ab2a2c0bdb1d9b97bdceb154de12d40d6a /chrome/plugin
parentc45a61ca508f3beba4a9f23dd6468b6f488820d7 (diff)
downloadchromium_src-e29b96a75e3d7209226f77c47310a7773c31a116.zip
chromium_src-e29b96a75e3d7209226f77c47310a7773c31a116.tar.gz
chromium_src-e29b96a75e3d7209226f77c47310a7773c31a116.tar.bz2
Sandboxing built-in flash
This is the last change needed to have an experimental sandboxed flash for windows - Adds an export so flash can lower the token - Thightents the policy a bit - Sets a separate flash data directory. BUG=50796 TES=see bug Review URL: http://codereview.chromium.org/3245006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57899 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/plugin')
-rw-r--r--chrome/plugin/plugin_main.cc35
1 files changed, 32 insertions, 3 deletions
diff --git a/chrome/plugin/plugin_main.cc b/chrome/plugin/plugin_main.cc
index 8313b68..3267fa0 100644
--- a/chrome/plugin/plugin_main.cc
+++ b/chrome/plugin/plugin_main.cc
@@ -47,6 +47,27 @@ void InitializeChromeApplication();
void WorkaroundFlashLAHF();
#endif
+#if defined(OS_WIN)
+// This function is provided so that the built-in flash can lock down the
+// sandbox by calling DelayedLowerToken(0).
+extern "C" DWORD __declspec(dllexport) __stdcall DelayedLowerToken(void* ts) {
+ // s_ts is only set the first time the function is called, which happens
+ // in PluginMain.
+ static sandbox::TargetServices* s_ts =
+ reinterpret_cast<sandbox::TargetServices*>(ts);
+ if (ts)
+ return 0;
+ s_ts->LowerToken();
+ return 1;
+};
+
+// Returns true if the plugin to be loaded is the internal flash.
+bool IsPluginBuiltInFlash(const CommandLine& cmd_line) {
+ FilePath path = cmd_line.GetSwitchValuePath(switches::kPluginPath);
+ return (path.BaseName() == FilePath(L"gcswf32.dll"));
+}
+#endif
+
// main() routine for running as the plugin process.
int PluginMain(const MainFunctionParams& parameters) {
#if defined(USE_LINUX_BREAKPAD)
@@ -108,9 +129,17 @@ int PluginMain(const MainFunctionParams& parameters) {
ChildProcess plugin_process;
plugin_process.set_main_thread(new PluginThread());
#if defined(OS_WIN)
- if (!no_sandbox && target_services)
- target_services->LowerToken();
-
+ if (!no_sandbox && target_services) {
+ // We are sandboxing the plugin. If it is a generic plug-in, we lock down
+ // the sandbox right away, but if it is the built-in flash we let flash
+ // start elevated and it will call DelayedLowerToken(0) when it's ready.
+ if (IsPluginBuiltInFlash(parsed_command_line)) {
+ DLOG(INFO) << "Sandboxing flash";
+ DelayedLowerToken(target_services);
+ } else {
+ target_services->LowerToken();
+ }
+ }
if (sandbox_test_module) {
RunRendererTests run_security_tests =
reinterpret_cast<RunPluginTests>(GetProcAddress(sandbox_test_module,