summaryrefslogtreecommitdiffstats
path: root/sandbox
diff options
context:
space:
mode:
authorshrikant <shrikant@chromium.org>2015-04-17 10:34:43 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-17 17:34:55 +0000
commitcb0da85dcf65824f96233ed77fd04d99b4c031cb (patch)
tree60978135b9e1f8eafec15b68a457f052167cffd5 /sandbox
parent44dbe9eef708acfbe06855ac0f42cc01e3627dd5 (diff)
downloadchromium_src-cb0da85dcf65824f96233ed77fd04d99b4c031cb.zip
chromium_src-cb0da85dcf65824f96233ed77fd04d99b4c031cb.tar.gz
chromium_src-cb0da85dcf65824f96233ed77fd04d99b4c031cb.tar.bz2
Adding checks in sandbox code to get some data on AppContainer based CreateProcess failures.
Due to limited debugging options, given it doesn't repro locally, adding some checks in sandbox code to gather more data. BUG=467920 R=jschuh@chromium.org,cpu@chromium.org Review URL: https://codereview.chromium.org/1093443002 Cr-Commit-Position: refs/heads/master@{#325663}
Diffstat (limited to 'sandbox')
-rw-r--r--sandbox/win/src/target_process.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/sandbox/win/src/target_process.cc b/sandbox/win/src/target_process.cc
index e0284c3..2af8917 100644
--- a/sandbox/win/src/target_process.cc
+++ b/sandbox/win/src/target_process.cc
@@ -5,6 +5,8 @@
#include "sandbox/win/src/target_process.h"
#include "base/basictypes.h"
+#include "base/debug/alias.h"
+#include "base/debug/dump_without_crashing.h"
#include "base/memory/scoped_ptr.h"
#include "base/win/pe_image.h"
#include "base/win/startup_information.h"
@@ -157,6 +159,10 @@ DWORD TargetProcess::Create(const wchar_t* exe_path,
NULL, // Use current directory of the caller.
startup_info.startup_info(),
&temp_process_info)) {
+ // TODO(shrikant): Remove following code once we gather some dumps for
+ // debugging appcontainer related failures (crbug.com/467920).
+ base::debug::Alias(exe_path);
+ base::debug::DumpWithoutCrashing();
return ::GetLastError();
}
} else {
@@ -182,6 +188,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path,
// Assign the suspended target to the windows job object.
if (!::AssignProcessToJobObject(job_, process_info.process_handle())) {
win_result = ::GetLastError();
+ if (set_lockdown_token_after_create) {
+ // TODO(shrikant): Remove this code once we gather some dumps for
+ // debugging appcontainer related failures (crbug.com/467920).
+ base::debug::Alias(&win_result);
+ base::debug::DumpWithoutCrashing();
+ }
::TerminateProcess(process_info.process_handle(), 0);
return win_result;
}
@@ -194,6 +206,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path,
HANDLE temp_thread = process_info.thread_handle();
if (!::SetThreadToken(&temp_thread, initial_token_.Get())) {
win_result = ::GetLastError();
+ if (set_lockdown_token_after_create) {
+ // TODO(shrikant): Remove this code once we gather some dumps for
+ // debugging appcontainer related failures (crbug.com/467920).
+ base::debug::Alias(&win_result);
+ base::debug::DumpWithoutCrashing();
+ }
// It might be a security breach if we let the target run outside the job
// so kill it before it causes damage.
::TerminateProcess(process_info.process_handle(), 0);
@@ -217,6 +235,10 @@ DWORD TargetProcess::Create(const wchar_t* exe_path,
sizeof(process_access_token));
if (!NT_SUCCESS(status)) {
win_result = ::GetLastError();
+ // TODO(shrikant): Remove this code once we gather some dumps for
+ // debugging appcontainer related failures (crbug.com/467920).
+ base::debug::Alias(&win_result);
+ base::debug::DumpWithoutCrashing();
::TerminateProcess(process_info.process_handle(), 0); // exit code
return win_result;
}
@@ -226,6 +248,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path,
context.ContextFlags = CONTEXT_ALL;
if (!::GetThreadContext(process_info.thread_handle(), &context)) {
win_result = ::GetLastError();
+ if (set_lockdown_token_after_create) {
+ // TODO(shrikant): Remove this code once we gather some dumps for
+ // debugging appcontainer related failures (crbug.com/467920).
+ base::debug::Alias(&win_result);
+ base::debug::DumpWithoutCrashing();
+ }
::TerminateProcess(process_info.process_handle(), 0);
return win_result;
}
@@ -242,6 +270,12 @@ DWORD TargetProcess::Create(const wchar_t* exe_path,
if (!target_info->DuplicateFrom(process_info)) {
win_result = ::GetLastError(); // This may or may not be correct.
+ if (set_lockdown_token_after_create) {
+ // TODO(shrikant): Remove this code once we gather some dumps for
+ // debugging appcontainer related failures (crbug.com/467920).
+ base::debug::Alias(&win_result);
+ base::debug::DumpWithoutCrashing();
+ }
::TerminateProcess(process_info.process_handle(), 0);
return win_result;
}