diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-10-31 11:28:09 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2019-12-19 14:05:40 +0100 |
commit | 79d4cf6e8eb569ec039c33e407fab787cc1a687f (patch) | |
tree | b62d60ef2a8d1ed5662cdc38a68505ac018f1bf4 /src/core/process_main.cpp | |
parent | 16651238b839b0e85c8a225657b6650c6005b176 (diff) |
Enable Windows sandbox
Enable sandboxing on Windows. Enable heterogeneous sandbox symbol
resolution and statically link the sandboxing code into the helper
process. This means we have two copies of the sandboxing code,
one statically linked in the executable and one in the shared
library. Since they are not exported they don't conflict, but
we need to take to initialize the right version in the helper process
binary, and pass its sandbox interface to shared library using it.
For sandbox debug output, we also need to initialize the second copy
of the commandlineparser and logging system.
Fixes: QTBUG-51170
Change-Id: I8f503c8d6b40674465f32772ef906817dad2b449
Reviewed-by: Kirill Burtsev <kirill.burtsev@qt.io>
Diffstat (limited to 'src/core/process_main.cpp')
-rw-r--r-- | src/core/process_main.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/core/process_main.cpp b/src/core/process_main.cpp index d661d3b90..ade0f6e99 100644 --- a/src/core/process_main.cpp +++ b/src/core/process_main.cpp @@ -49,20 +49,27 @@ #include "sandbox/mac/seatbelt_exec.h" #endif -namespace QtWebEngine { +namespace QtWebEngineCore { + +#if defined(OS_WIN) +extern sandbox::SandboxInterfaceInfo *staticSandboxInterfaceInfo(sandbox::SandboxInterfaceInfo *info = nullptr); +#endif /*! \internal */ int processMain(int argc, const char **argv) { - QtWebEngineCore::ContentMainDelegateQt delegate; + ContentMainDelegateQt delegate; content::ContentMainParams params(&delegate); #if defined(OS_WIN) HINSTANCE instance_handle = NULL; + params.sandbox_info = staticSandboxInterfaceInfo(); sandbox::SandboxInterfaceInfo sandbox_info = {0}; - content::InitializeSandboxInfo(&sandbox_info); + if (!params.sandbox_info) { + content::InitializeSandboxInfo(&sandbox_info); + params.sandbox_info = &sandbox_info; + } params.instance = instance_handle; - params.sandbox_info = &sandbox_info; #else params.argc = argc; params.argv = argv; @@ -78,4 +85,4 @@ int processMain(int argc, const char **argv) return content::ContentMain(params); } -} // namespace +} // namespace QtWebEngineCore |