| Index: content/common/sandbox_linux/sandbox_linux.cc
|
| diff --git a/content/common/sandbox_linux/sandbox_linux.cc b/content/common/sandbox_linux/sandbox_linux.cc
|
| index 6f605849cbc1e90686172bbc66964baab6109463..5fd89f725c3ec9d1fba28e5e34c4775fcd1cdb25 100644
|
| --- a/content/common/sandbox_linux/sandbox_linux.cc
|
| +++ b/content/common/sandbox_linux/sandbox_linux.cc
|
| @@ -15,7 +15,6 @@
|
| #include "base/bind.h"
|
| #include "base/callback_helpers.h"
|
| #include "base/command_line.h"
|
| -#include "base/files/scoped_file.h"
|
| #include "base/logging.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/memory/singleton.h"
|
| @@ -44,6 +43,10 @@
|
| }
|
| };
|
|
|
| +// Don't use base::ScopedFD since it doesn't CHECK that the file descriptor was
|
| +// closed.
|
| +typedef scoped_ptr<int, FDCloser> SafeScopedFD;
|
| +
|
| void LogSandboxStarted(const std::string& sandbox_name) {
|
| const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| const std::string process_type =
|
| @@ -200,25 +203,25 @@
|
| // of using the pid.
|
| bool LinuxSandbox::IsSingleThreaded() const {
|
| bool is_single_threaded = false;
|
| - base::ScopedFD proc_self_task(OpenProcTaskFd(proc_fd_));
|
| + int proc_self_task = OpenProcTaskFd(proc_fd_);
|
|
|
| // In Debug mode, it's mandatory to be able to count threads to catch bugs.
|
| #if !defined(NDEBUG)
|
| // Using CHECK here since we want to check all the cases where
|
| // !defined(NDEBUG)
|
| // gets built.
|
| - CHECK(proc_self_task.is_valid())
|
| - << "Could not count threads, the sandbox was not "
|
| - << "pre-initialized properly.";
|
| + CHECK_LE(0, proc_self_task) << "Could not count threads, the sandbox was not "
|
| + << "pre-initialized properly.";
|
| #endif // !defined(NDEBUG)
|
|
|
| - if (!proc_self_task.is_valid()) {
|
| + if (proc_self_task < 0) {
|
| // Pretend to be monothreaded if it can't be determined (for instance the
|
| // setuid sandbox is already engaged but no proc_fd_ is available).
|
| is_single_threaded = true;
|
| } else {
|
| + SafeScopedFD task_closer(&proc_self_task);
|
| is_single_threaded =
|
| - sandbox::ThreadHelpers::IsSingleThreaded(proc_self_task.get());
|
| + sandbox::ThreadHelpers::IsSingleThreaded(proc_self_task);
|
| }
|
|
|
| return is_single_threaded;
|
| @@ -388,10 +391,11 @@
|
|
|
| void LinuxSandbox::StopThreadAndEnsureNotCounted(base::Thread* thread) const {
|
| DCHECK(thread);
|
| - base::ScopedFD proc_self_task(OpenProcTaskFd(proc_fd_));
|
| - PCHECK(proc_self_task.is_valid());
|
| - CHECK(sandbox::ThreadHelpers::StopThreadAndWatchProcFS(proc_self_task.get(),
|
| - thread));
|
| + int proc_self_task = OpenProcTaskFd(proc_fd_);
|
| + PCHECK(proc_self_task >= 0);
|
| + SafeScopedFD task_closer(&proc_self_task);
|
| + CHECK(
|
| + sandbox::ThreadHelpers::StopThreadAndWatchProcFS(proc_self_task, thread));
|
| }
|
|
|
| } // namespace content
|
|
|