Chromium Code Reviews| Index: sandbox/win/src/sandbox_policy_base.cc |
| =================================================================== |
| --- sandbox/win/src/sandbox_policy_base.cc (revision 155197) |
| +++ sandbox/win/src/sandbox_policy_base.cc (working copy) |
| @@ -15,6 +15,7 @@ |
| #include "sandbox/win/src/handle_policy.h" |
| #include "sandbox/win/src/job.h" |
| #include "sandbox/win/src/interception.h" |
| +#include "sandbox/win/src/process_mitigations.h" |
| #include "sandbox/win/src/named_pipe_dispatcher.h" |
| #include "sandbox/win/src/named_pipe_policy.h" |
| #include "sandbox/win/src/policy_broker.h" |
| @@ -54,6 +55,8 @@ |
| SANDBOX_INTERCEPT IntegrityLevel g_shared_delayed_integrity_level; |
|
rvargas (doing something else)
2012/09/08 02:23:32
remove
jschuh
2012/09/10 23:58:48
Done.
|
| +SANDBOX_INTERCEPT uint64 g_shared_delayed_mitigations; |
| + |
| // Initializes static members. |
| HWINSTA PolicyBase::alternate_winstation_handle_ = NULL; |
| HDESK PolicyBase::alternate_desktop_handle_ = NULL; |
| @@ -70,6 +73,8 @@ |
| relaxed_interceptions_(true), |
| integrity_level_(INTEGRITY_LEVEL_LAST), |
| delayed_integrity_level_(INTEGRITY_LEVEL_LAST), |
| + mitigations_(0), |
| + delayed_mitigations_(0), |
| policy_maker_(NULL), |
| policy_(NULL) { |
| ::InitializeCriticalSection(&lock_); |
| @@ -276,6 +281,28 @@ |
| return SBOX_ALL_OK; |
| } |
| +ResultCode PolicyBase::SetProcessMitigations(uint64 flags) { |
| + if (!CanSetProcessMitigationsPreStartup(flags)) |
| + return SBOX_ERROR_BAD_PARAMS; |
| + mitigations_ = flags; |
| + return SBOX_ALL_OK; |
| +} |
| + |
| +uint64 PolicyBase::GetProcessMitigations() { |
| + return mitigations_; |
| +} |
| + |
| +ResultCode PolicyBase::SetDelayedProcessMitigations(uint64 flags) { |
| + if (!CanSetProcessMitigationsPostStartup(flags)) |
| + return SBOX_ERROR_BAD_PARAMS; |
| + delayed_mitigations_ = flags; |
| + return SBOX_ALL_OK; |
| +} |
| + |
| +uint64 PolicyBase::GetDelayedProcessMitigations() { |
| + return delayed_mitigations_; |
| +} |
| + |
| void PolicyBase::SetStrictInterceptions() { |
| relaxed_interceptions_ = false; |
| } |
| @@ -450,6 +477,11 @@ |
| if (NULL != policy_) |
| policy_maker_->Done(); |
| + if (!SetProcessMitigationsForSuspendedProcess(target->Process(), |
| + mitigations_)) { |
| + return false; |
| + } |
| + |
| if (!SetupAllInterceptions(target)) |
| return false; |
| @@ -469,6 +501,19 @@ |
| if (SBOX_ALL_OK != ret) |
| return false; |
| + // Add in delayed mitigations and pseudo-mitigations enforced at startup. |
| + g_shared_delayed_mitigations = delayed_mitigations_ | |
| + GetPostStartupProcessMitigations(mitigations_); |
| + if (!CanSetProcessMitigationsPostStartup(g_shared_delayed_mitigations)) |
| + return false; |
| + |
| + ret = target->TransferVariable("g_shared_delayed_mitigations", |
| + &g_shared_delayed_mitigations, |
| + sizeof(g_shared_delayed_mitigations)); |
| + g_shared_delayed_mitigations = 0; |
| + if (SBOX_ALL_OK != ret) |
| + return false; |
| + |
| AutoLock lock(&lock_); |
| targets_.push_back(target); |
| return true; |