OLD | NEW |
1 // Copyright (c) 2012 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/win/src/broker_services.h" | 5 #include "sandbox/win/src/broker_services.h" |
6 | 6 |
7 #include <AclAPI.h> | 7 #include <AclAPI.h> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 if (1 == target_counter) { | 272 if (1 == target_counter) { |
273 ::ResetEvent(no_targets); | 273 ::ResetEvent(no_targets); |
274 } | 274 } |
275 break; | 275 break; |
276 } | 276 } |
277 | 277 |
278 case JOB_OBJECT_MSG_EXIT_PROCESS: | 278 case JOB_OBJECT_MSG_EXIT_PROCESS: |
279 case JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS: { | 279 case JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS: { |
280 { | 280 { |
281 AutoLock lock(&broker->lock_); | 281 AutoLock lock(&broker->lock_); |
282 broker->child_process_ids_.erase(reinterpret_cast<DWORD>(ovl)); | 282 broker->child_process_ids_.erase( |
| 283 static_cast<DWORD>(reinterpret_cast<uintptr_t>(ovl))); |
283 } | 284 } |
284 --target_counter; | 285 --target_counter; |
285 if (0 == target_counter) | 286 if (0 == target_counter) |
286 ::SetEvent(no_targets); | 287 ::SetEvent(no_targets); |
287 | 288 |
288 DCHECK(target_counter >= 0); | 289 DCHECK(target_counter >= 0); |
289 break; | 290 break; |
290 } | 291 } |
291 | 292 |
292 case JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT: { | 293 case JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT: { |
293 break; | 294 break; |
294 } | 295 } |
295 | 296 |
296 case JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT: { | 297 case JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT: { |
297 BOOL res = ::TerminateJobObject(tracker->job, | 298 BOOL res = ::TerminateJobObject(tracker->job, |
298 SBOX_FATAL_MEMORY_EXCEEDED); | 299 SBOX_FATAL_MEMORY_EXCEEDED); |
299 DCHECK(res); | 300 DCHECK(res); |
300 break; | 301 break; |
301 } | 302 } |
302 | 303 |
303 default: { | 304 default: { |
304 NOTREACHED(); | 305 NOTREACHED(); |
305 break; | 306 break; |
306 } | 307 } |
307 } | 308 } |
308 } else if (THREAD_CTRL_REMOVE_PEER == key) { | 309 } else if (THREAD_CTRL_REMOVE_PEER == key) { |
309 // Remove a process from our list of peers. | 310 // Remove a process from our list of peers. |
310 AutoLock lock(&broker->lock_); | 311 AutoLock lock(&broker->lock_); |
311 PeerTrackerMap::iterator it = | 312 PeerTrackerMap::iterator it = broker->peer_map_.find( |
312 broker->peer_map_.find(reinterpret_cast<DWORD>(ovl)); | 313 static_cast<DWORD>(reinterpret_cast<uintptr_t>(ovl))); |
313 DeregisterPeerTracker(it->second); | 314 DeregisterPeerTracker(it->second); |
314 broker->peer_map_.erase(it); | 315 broker->peer_map_.erase(it); |
315 } else if (THREAD_CTRL_QUIT == key) { | 316 } else if (THREAD_CTRL_QUIT == key) { |
316 // The broker object is being destroyed so the thread needs to exit. | 317 // The broker object is being destroyed so the thread needs to exit. |
317 return 0; | 318 return 0; |
318 } else { | 319 } else { |
319 // We have not implemented more commands. | 320 // We have not implemented more commands. |
320 NOTREACHED(); | 321 NOTREACHED(); |
321 } | 322 } |
322 } | 323 } |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 | 536 |
536 bool BrokerServicesBase::IsActiveTarget(DWORD process_id) { | 537 bool BrokerServicesBase::IsActiveTarget(DWORD process_id) { |
537 AutoLock lock(&lock_); | 538 AutoLock lock(&lock_); |
538 return child_process_ids_.find(process_id) != child_process_ids_.end() || | 539 return child_process_ids_.find(process_id) != child_process_ids_.end() || |
539 peer_map_.find(process_id) != peer_map_.end(); | 540 peer_map_.find(process_id) != peer_map_.end(); |
540 } | 541 } |
541 | 542 |
542 VOID CALLBACK BrokerServicesBase::RemovePeer(PVOID parameter, BOOLEAN timeout) { | 543 VOID CALLBACK BrokerServicesBase::RemovePeer(PVOID parameter, BOOLEAN timeout) { |
543 PeerTracker* peer = reinterpret_cast<PeerTracker*>(parameter); | 544 PeerTracker* peer = reinterpret_cast<PeerTracker*>(parameter); |
544 // Don't check the return code because we this may fail (safely) at shutdown. | 545 // Don't check the return code because we this may fail (safely) at shutdown. |
545 ::PostQueuedCompletionStatus(peer->job_port, 0, THREAD_CTRL_REMOVE_PEER, | 546 ::PostQueuedCompletionStatus( |
546 reinterpret_cast<LPOVERLAPPED>(peer->id)); | 547 peer->job_port, 0, THREAD_CTRL_REMOVE_PEER, |
| 548 reinterpret_cast<LPOVERLAPPED>(static_cast<uintptr_t>(peer->id))); |
547 } | 549 } |
548 | 550 |
549 ResultCode BrokerServicesBase::AddTargetPeer(HANDLE peer_process) { | 551 ResultCode BrokerServicesBase::AddTargetPeer(HANDLE peer_process) { |
550 scoped_ptr<PeerTracker> peer(new PeerTracker(::GetProcessId(peer_process), | 552 scoped_ptr<PeerTracker> peer(new PeerTracker(::GetProcessId(peer_process), |
551 job_port_)); | 553 job_port_)); |
552 if (!peer->id) | 554 if (!peer->id) |
553 return SBOX_ERROR_GENERIC; | 555 return SBOX_ERROR_GENERIC; |
554 | 556 |
555 HANDLE process_handle; | 557 HANDLE process_handle; |
556 if (!::DuplicateHandle(::GetCurrentProcess(), peer_process, | 558 if (!::DuplicateHandle(::GetCurrentProcess(), peer_process, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
596 return SBOX_ERROR_UNSUPPORTED; | 598 return SBOX_ERROR_UNSUPPORTED; |
597 | 599 |
598 base::string16 name = LookupAppContainer(sid); | 600 base::string16 name = LookupAppContainer(sid); |
599 if (name.empty()) | 601 if (name.empty()) |
600 return SBOX_ERROR_INVALID_APP_CONTAINER; | 602 return SBOX_ERROR_INVALID_APP_CONTAINER; |
601 | 603 |
602 return DeleteAppContainer(sid); | 604 return DeleteAppContainer(sid); |
603 } | 605 } |
604 | 606 |
605 } // namespace sandbox | 607 } // namespace sandbox |
OLD | NEW |