Commit df0c0672 authored by rvargas@google.com's avatar rvargas@google.com

Sandbox: Verify that members of TargetProcess are valid before freeing them.

SpawnCleanup may trigger the destruction of a partially created TargetProcess.

BUG=139898
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10831133

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149763 0039d316-1c4b-4281-b951-d872f2087c98
parent 1c61fe00
...@@ -106,16 +106,19 @@ TargetProcess::~TargetProcess() { ...@@ -106,16 +106,19 @@ TargetProcess::~TargetProcess() {
// it. http://b/893891 // it. http://b/893891
// For now, this wait is there only to do a best effort to prevent some leaks // For now, this wait is there only to do a best effort to prevent some leaks
// from showing up in purify. // from showing up in purify.
::WaitForSingleObject(sandbox_process_info_.process_handle(), 50); if (sandbox_process_info_.IsValid()) {
if (!::GetExitCodeProcess(sandbox_process_info_.process_handle(), ::WaitForSingleObject(sandbox_process_info_.process_handle(), 50);
&exit_code) || (STILL_ACTIVE == exit_code)) { if (!::GetExitCodeProcess(sandbox_process_info_.process_handle(),
// It is an error to destroy this object while the target process is still &exit_code) || (STILL_ACTIVE == exit_code)) {
// alive because we need to destroy the IPC subsystem and cannot risk to // It is an error to destroy this object while the target process is still
// have an IPC reach us after this point. // alive because we need to destroy the IPC subsystem and cannot risk to
shared_section_.Take(); // have an IPC reach us after this point.
SharedMemIPCServer* server = ipc_server_.release(); if (shared_section_.IsValid())
sandbox_process_info_.TakeProcessHandle(); shared_section_.Take();
return; SharedMemIPCServer* server = ipc_server_.release();
sandbox_process_info_.TakeProcessHandle();
return;
}
} }
// ipc_server_ references our process handle, so make sure the former is shut // ipc_server_ references our process handle, so make sure the former is shut
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment