Index: content/common/sandbox_linux.h |
diff --git a/content/common/sandbox_linux.h b/content/common/sandbox_linux.h |
index 3df65ea27a4d5d64bbbaac11c18ad1a074f19fd9..ab3df496b2f9c514f6388553af5cad737a75e759 100644 |
--- a/content/common/sandbox_linux.h |
+++ b/content/common/sandbox_linux.h |
@@ -33,6 +33,17 @@ class LinuxSandbox { |
METHOD_MATCH_WITH_FALLBACK = 37, |
}; |
+ // A list of sandbox configuration for content's process types. |
+ enum SandboxConfig { |
+ SANDBOX_CONFIG_INVALID = 0, |
+ SANDBOX_CONFIG_GENERIC, // Exact sandbox unspecified, useful for pre-init. |
+ SANDBOX_CONFIG_RENDERER, |
+ SANDBOX_CONFIG_WORKER, |
+ SANDBOX_CONFIG_GPU, |
+ SANDBOX_CONFIG_PPAPI, |
+ SANDBOX_CONFIG_UTILITY, |
+ }; |
+ |
// Get our singleton instance. |
static LinuxSandbox* GetInstance(); |
@@ -47,14 +58,22 @@ class LinuxSandbox { |
// called for every child process. |
// TODO(markus, jln) we know this is not always done at the moment |
// (crbug.com/139877). |
- void PreinitializeSandbox(const std::string& process_type); |
+ // These functions can accept SANDBOX_CONFIG_GENERIC as a parameter if the |
+ // full type of the sandbox isn't known yet. |
+ void PreinitializeSandbox(LinuxSandbox::SandboxConfig sandbox_config); |
// These should be called together. |
void PreinitializeSandboxBegin(); |
- void PreinitializeSandboxFinish(const std::string& process_type); |
+ void PreinitializeSandboxFinish(LinuxSandbox::SandboxConfig sandbox_config); |
+ |
+ // Initialize the sandbox with the given pre-built configuration. Currently |
+ // seccomp-legacy, seccomp-bpf, address space limitations (the setuid sandbox |
+ // works differently and is set-up in the Zygote). This will instanciate the |
Markus (顧孟勤)
2013/04/10 23:39:50
s/instanciate/instantiate/
|
+ // LinuxSandbox singleton if it doesn't already exist. |
+ static bool InitializeSandbox(LinuxSandbox::SandboxConfig sandbox_config); |
- // Returns the Status of the sandbox. Can only be queried if we went through |
- // PreinitializeSandbox() or PreinitializeSandboxBegin(). This is a bitmask |
- // and uses the constants defined in "enum LinuxSandboxStatus". |
+ // Returns the Status of the renderers' sandbox. Can only be queried if we |
+ // went through PreinitializeSandbox() or PreinitializeSandboxBegin(). This |
+ // is a bitmask and uses the constants defined in "enum LinuxSandboxStatus". |
// Since we need to provide the status before the sandboxes are actually |
// started, this returns what will actually happen once the various Start* |
// functions are called from inside a renderer. |
@@ -71,15 +90,15 @@ class LinuxSandbox { |
sandbox::SetuidSandboxClient* setuid_sandbox_client() const; |
// Check the policy and eventually start the seccomp-legacy sandbox. |
- bool StartSeccompLegacy(const std::string& process_type); |
+ bool StartSeccompLegacy(LinuxSandbox::SandboxConfig sandbox_config); |
// Check the policy and eventually start the seccomp-bpf sandbox. This should |
// never be called with threads started. If we detect that thread have |
// started we will crash. |
- bool StartSeccompBpf(const std::string& process_type); |
+ bool StartSeccompBpf(LinuxSandbox::SandboxConfig sandbox_config); |
// Limit the address space of the current process (and its children). |
// to make some vulnerabilities harder to exploit. |
- bool LimitAddressSpace(const std::string& process_type); |
+ bool LimitAddressSpace(LinuxSandbox::SandboxConfig sandbox_config); |
private: |
friend struct DefaultSingletonTraits<LinuxSandbox>; |