summaryrefslogtreecommitdiffstats
path: root/sandbox
diff options
context:
space:
mode:
authorjln@chromium.org <jln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-11 23:27:29 +0000
committerjln@chromium.org <jln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-11 23:27:29 +0000
commit9750fe0c78d0efd1175d4e072c0969878117ff90 (patch)
tree70c90cc43cc4460c4db4ab9fb2cb7bf18ad1c40d /sandbox
parent6286a9394f44bac3fe361fa81c095e93f036f93f (diff)
downloadchromium_src-9750fe0c78d0efd1175d4e072c0969878117ff90.zip
chromium_src-9750fe0c78d0efd1175d4e072c0969878117ff90.tar.gz
chromium_src-9750fe0c78d0efd1175d4e072c0969878117ff90.tar.bz2
Seccomp BPF: handle EINTR in error reporting setup.
Wrap dup2 with HANDLE_EINTR in the error reporting set-up for the BPF support detection process. We also print errno as an attempt to obtain more information on this puzzling bug. BUG=152530 Review URL: https://chromiumcodereview.appspot.com/11103021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161443 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sandbox')
-rw-r--r--sandbox/linux/seccomp-bpf/sandbox_bpf.cc11
1 files changed, 8 insertions, 3 deletions
diff --git a/sandbox/linux/seccomp-bpf/sandbox_bpf.cc b/sandbox/linux/seccomp-bpf/sandbox_bpf.cc
index f7c8511..bc7e682 100644
--- a/sandbox/linux/seccomp-bpf/sandbox_bpf.cc
+++ b/sandbox/linux/seccomp-bpf/sandbox_bpf.cc
@@ -84,11 +84,16 @@ bool Sandbox::RunFunctionInPolicy(void (*CodeInSandbox)(),
// Test a very simple sandbox policy to verify that we can
// successfully turn on sandboxing.
Die::EnableSimpleExit();
+ errno = 0;
if (HANDLE_EINTR(close(fds[0])) ||
- dup2(fds[1], 2) != 2 ||
+ HANDLE_EINTR(dup2(fds[1], 2)) != 2 ||
HANDLE_EINTR(close(fds[1]))) {
- static const char msg[] = "Failed to set up stderr\n";
- if (HANDLE_EINTR(write(fds[1], msg, sizeof(msg)-1))) { }
+ const char* error_string = strerror(errno);
+ static const char msg[] = "Failed to set up stderr: ";
+ if (HANDLE_EINTR(write(fds[1], msg, sizeof(msg)-1)) > 0 && error_string &&
+ HANDLE_EINTR(write(fds[1], error_string, strlen(error_string))) > 0 &&
+ HANDLE_EINTR(write(fds[1], "\n", 1))) {
+ }
} else {
evaluators_.clear();
setSandboxPolicy(syscallEvaluator, NULL);