| Index: content/common/sandbox_win.cc
|
| diff --git a/content/common/sandbox_win.cc b/content/common/sandbox_win.cc
|
| index 13b3bd4027fe79aa0e2236f5080a43baf7d231fe..f5c86f7d2cb23c6a981703e5c43d3d22a4026ab8 100644
|
| --- a/content/common/sandbox_win.cc
|
| +++ b/content/common/sandbox_win.cc
|
| @@ -467,13 +467,14 @@ BOOL WINAPI DuplicateHandlePatch(HANDLE source_process_handle,
|
| if (!::IsProcessInJob(target_process_handle, NULL, &is_in_job)) {
|
| // We need a handle with permission to check the job object.
|
| if (ERROR_ACCESS_DENIED == ::GetLastError()) {
|
| - base::win::ScopedHandle process;
|
| + HANDLE temp_handle;
|
| CHECK(g_iat_orig_duplicate_handle(::GetCurrentProcess(),
|
| target_process_handle,
|
| ::GetCurrentProcess(),
|
| - process.Receive(),
|
| + &temp_handle,
|
| PROCESS_QUERY_INFORMATION,
|
| FALSE, 0));
|
| + base::win::ScopedHandle process(temp_handle);
|
| CHECK(::IsProcessInJob(process, NULL, &is_in_job));
|
| }
|
| }
|
| @@ -483,10 +484,11 @@ BOOL WINAPI DuplicateHandlePatch(HANDLE source_process_handle,
|
| CHECK(!inherit_handle) << kDuplicateHandleWarning;
|
|
|
| // Duplicate the handle again, to get the final permissions.
|
| - base::win::ScopedHandle handle;
|
| + HANDLE temp_handle;
|
| CHECK(g_iat_orig_duplicate_handle(target_process_handle, *target_handle,
|
| - ::GetCurrentProcess(), handle.Receive(),
|
| + ::GetCurrentProcess(), &temp_handle,
|
| 0, FALSE, DUPLICATE_SAME_ACCESS));
|
| + base::win::ScopedHandle handle(temp_handle);
|
|
|
| // Callers use CHECK macro to make sure we get the right stack.
|
| CheckDuplicateHandle(handle);
|
| @@ -600,7 +602,6 @@ base::ProcessHandle StartSandboxedProcess(
|
| return process;
|
| }
|
|
|
| - base::win::ScopedProcessInformation target;
|
| sandbox::TargetPolicy* policy = g_broker_services->CreatePolicy();
|
|
|
| sandbox::MitigationFlags mitigations = sandbox::MITIGATION_HEAP_TERMINATE |
|
| @@ -672,11 +673,13 @@ base::ProcessHandle StartSandboxedProcess(
|
|
|
| TRACE_EVENT_BEGIN_ETW("StartProcessWithAccess::LAUNCHPROCESS", 0, 0);
|
|
|
| + PROCESS_INFORMATION temp_process_info = {};
|
| result = g_broker_services->SpawnTarget(
|
| - cmd_line->GetProgram().value().c_str(),
|
| - cmd_line->GetCommandLineString().c_str(),
|
| - policy, target.Receive());
|
| + cmd_line->GetProgram().value().c_str(),
|
| + cmd_line->GetCommandLineString().c_str(),
|
| + policy, &temp_process_info);
|
| policy->Release();
|
| + base::win::ScopedProcessInformation target(temp_process_info);
|
|
|
| TRACE_EVENT_END_ETW("StartProcessWithAccess::LAUNCHPROCESS", 0, 0);
|
|
|
|
|