Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(186)

Side by Side Diff: sandbox/src/sandbox_policy_base.cc

Issue 9838083: Add a sandbox API for broker handle duplication (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sandbox/src/sandbox_policy.h ('k') | sandbox/src/target_services.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sandbox/src/sandbox_policy_base.h" 5 #include "sandbox/src/sandbox_policy_base.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "sandbox/src/filesystem_dispatcher.h" 10 #include "sandbox/src/filesystem_dispatcher.h"
11 #include "sandbox/src/filesystem_policy.h" 11 #include "sandbox/src/filesystem_policy.h"
12 #include "sandbox/src/handle_dispatcher.h"
13 #include "sandbox/src/handle_policy.h"
12 #include "sandbox/src/job.h" 14 #include "sandbox/src/job.h"
13 #include "sandbox/src/interception.h" 15 #include "sandbox/src/interception.h"
14 #include "sandbox/src/named_pipe_dispatcher.h" 16 #include "sandbox/src/named_pipe_dispatcher.h"
15 #include "sandbox/src/named_pipe_policy.h" 17 #include "sandbox/src/named_pipe_policy.h"
16 #include "sandbox/src/policy_broker.h" 18 #include "sandbox/src/policy_broker.h"
17 #include "sandbox/src/policy_engine_processor.h" 19 #include "sandbox/src/policy_engine_processor.h"
18 #include "sandbox/src/policy_low_level.h" 20 #include "sandbox/src/policy_low_level.h"
19 #include "sandbox/src/process_thread_dispatcher.h" 21 #include "sandbox/src/process_thread_dispatcher.h"
20 #include "sandbox/src/process_thread_policy.h" 22 #include "sandbox/src/process_thread_policy.h"
21 #include "sandbox/src/registry_dispatcher.h" 23 #include "sandbox/src/registry_dispatcher.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 ipc_targets_[IPC_NTOPENPROCESSTOKEN_TAG] = dispatcher; 91 ipc_targets_[IPC_NTOPENPROCESSTOKEN_TAG] = dispatcher;
90 ipc_targets_[IPC_NTOPENPROCESSTOKENEX_TAG] = dispatcher; 92 ipc_targets_[IPC_NTOPENPROCESSTOKENEX_TAG] = dispatcher;
91 93
92 dispatcher = new SyncDispatcher(this); 94 dispatcher = new SyncDispatcher(this);
93 ipc_targets_[IPC_CREATEEVENT_TAG] = dispatcher; 95 ipc_targets_[IPC_CREATEEVENT_TAG] = dispatcher;
94 ipc_targets_[IPC_OPENEVENT_TAG] = dispatcher; 96 ipc_targets_[IPC_OPENEVENT_TAG] = dispatcher;
95 97
96 dispatcher = new RegistryDispatcher(this); 98 dispatcher = new RegistryDispatcher(this);
97 ipc_targets_[IPC_NTCREATEKEY_TAG] = dispatcher; 99 ipc_targets_[IPC_NTCREATEKEY_TAG] = dispatcher;
98 ipc_targets_[IPC_NTOPENKEY_TAG] = dispatcher; 100 ipc_targets_[IPC_NTOPENKEY_TAG] = dispatcher;
101
102 dispatcher = new HandleDispatcher(this);
103 ipc_targets_[IPC_DUPLICATEHANDLEPROXY_TAG] = dispatcher;
99 } 104 }
100 105
101 PolicyBase::~PolicyBase() { 106 PolicyBase::~PolicyBase() {
102 TargetSet::iterator it; 107 TargetSet::iterator it;
103 for (it = targets_.begin(); it != targets_.end(); ++it) { 108 for (it = targets_.begin(); it != targets_.end(); ++it) {
104 TargetProcess* target = (*it); 109 TargetProcess* target = (*it);
105 delete target; 110 delete target;
106 } 111 }
107 delete ipc_targets_[IPC_NTCREATEFILE_TAG]; 112 delete ipc_targets_[IPC_NTCREATEFILE_TAG];
108 delete ipc_targets_[IPC_CREATENAMEDPIPEW_TAG]; 113 delete ipc_targets_[IPC_CREATENAMEDPIPEW_TAG];
109 delete ipc_targets_[IPC_NTOPENTHREAD_TAG]; 114 delete ipc_targets_[IPC_NTOPENTHREAD_TAG];
110 delete ipc_targets_[IPC_CREATEEVENT_TAG]; 115 delete ipc_targets_[IPC_CREATEEVENT_TAG];
111 delete ipc_targets_[IPC_NTCREATEKEY_TAG]; 116 delete ipc_targets_[IPC_NTCREATEKEY_TAG];
117 delete ipc_targets_[IPC_DUPLICATEHANDLEPROXY_TAG];
112 delete policy_maker_; 118 delete policy_maker_;
113 delete policy_; 119 delete policy_;
114 ::DeleteCriticalSection(&lock_); 120 ::DeleteCriticalSection(&lock_);
115 } 121 }
116 122
117 DWORD PolicyBase::MakeJobObject(HANDLE* job) { 123 DWORD PolicyBase::MakeJobObject(HANDLE* job) {
118 // Create the windows job object. 124 // Create the windows job object.
119 Job job_obj; 125 Job job_obj;
120 DWORD result = job_obj.Init(job_level_, NULL, ui_exceptions_); 126 DWORD result = job_obj.Init(job_level_, NULL, ui_exceptions_);
121 if (ERROR_SUCCESS != result) { 127 if (ERROR_SUCCESS != result) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 } 319 }
314 break; 320 break;
315 } 321 }
316 case SUBSYS_REGISTRY: { 322 case SUBSYS_REGISTRY: {
317 if (!RegistryPolicy::GenerateRules(pattern, semantics, policy_maker_)) { 323 if (!RegistryPolicy::GenerateRules(pattern, semantics, policy_maker_)) {
318 NOTREACHED(); 324 NOTREACHED();
319 return SBOX_ERROR_BAD_PARAMS; 325 return SBOX_ERROR_BAD_PARAMS;
320 } 326 }
321 break; 327 break;
322 } 328 }
329 case SUBSYS_HANDLES: {
330 if (!HandlePolicy::GenerateRules(pattern, semantics, policy_maker_)) {
331 NOTREACHED();
332 return SBOX_ERROR_BAD_PARAMS;
333 }
334 break;
335 }
323 default: { 336 default: {
324 return SBOX_ERROR_UNSUPPORTED; 337 return SBOX_ERROR_UNSUPPORTED;
325 } 338 }
326 } 339 }
327 340
328 return SBOX_ALL_OK; 341 return SBOX_ALL_OK;
329 } 342 }
330 343
331 EvalResult PolicyBase::EvalPolicy(int service, 344 EvalResult PolicyBase::EvalPolicy(int service,
332 CountedParameterSetBase* params) { 345 CountedParameterSetBase* params) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 465
453 // Finally, setup imports on the target so the interceptions can work. 466 // Finally, setup imports on the target so the interceptions can work.
454 return SetupNtdllImports(target); 467 return SetupNtdllImports(target);
455 } 468 }
456 469
457 bool PolicyBase::SetupHandleCloser(TargetProcess* target) { 470 bool PolicyBase::SetupHandleCloser(TargetProcess* target) {
458 return handle_closer_.InitializeTargetHandles(target); 471 return handle_closer_.InitializeTargetHandles(target);
459 } 472 }
460 473
461 } // namespace sandbox 474 } // namespace sandbox
OLDNEW
« no previous file with comments | « sandbox/src/sandbox_policy.h ('k') | sandbox/src/target_services.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698