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

Unified Diff: sandbox/src/broker_services.cc

Issue 9960045: Add sandbox support for associating peer processes (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sandbox/src/broker_services.h ('k') | sandbox/src/handle_policy_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sandbox/src/broker_services.cc
===================================================================
--- sandbox/src/broker_services.cc (revision 131361)
+++ sandbox/src/broker_services.cc (working copy)
@@ -315,4 +315,41 @@
return child_process_ids_.find(process_id) != child_process_ids_.end();
}
+VOID CALLBACK BrokerServicesBase::RemovePeer(PVOID process, BOOLEAN) {
+ DWORD process_id = ::GetProcessId(process);
+ BrokerServicesBase* broker = BrokerServicesBase::GetInstance();
+
+ AutoLock lock(&broker->lock_);
+ broker->child_process_ids_.erase(process_id);
+ CloseHandle(process);
+}
+
+ResultCode BrokerServicesBase::AddTargetPeer(HANDLE peer_process) {
+ DWORD peer_id = ::GetProcessId(peer_process);
+ base::win::ScopedHandle peer_handle;
+ if (!peer_id || !::DuplicateHandle(::GetCurrentProcess(), peer_process,
+ ::GetCurrentProcess(),
+ peer_handle.Receive(),
+ SYNCHRONIZE | PROCESS_QUERY_INFORMATION,
+ FALSE, 0)) {
cpu_(ooo_6.6-7.5) 2012/04/09 23:17:40 UnregisterWaitEx with some magic params.
jschuh 2012/04/10 00:10:11 Done.
+ return SBOX_ERROR_GENERIC;
+ }
+
+ HANDLE timer;
cpu_(ooo_6.6-7.5) 2012/04/09 23:17:40 wait_object
jschuh 2012/04/10 00:10:11 Done.
+ AutoLock lock(&lock_);
+ if (!::RegisterWaitForSingleObject(&timer, peer_handle, RemovePeer,
+ peer_handle, INFINITE,
+ WT_EXECUTEONLYONCE)) {
+ return SBOX_ERROR_GENERIC;
+ }
+ if (!child_process_ids_.insert(peer_id).second) {
+ ::CancelWaitableTimer(timer);
cpu_(ooo_6.6-7.5) 2012/04/09 23:17:40 UnregisterWait
jschuh 2012/04/10 00:10:11 Done.
+ return SBOX_ERROR_BAD_PARAMS;
+ }
+
+ // Leak the handle because it gets closed by the callback.
+ peer_handle.Take();
+ return SBOX_ALL_OK;
+}
+
} // namespace sandbox
« no previous file with comments | « sandbox/src/broker_services.h ('k') | sandbox/src/handle_policy_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698