summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Sesek <rsesek@chromium.org>2016-01-27 14:14:08 -0500
committerRobert Sesek <rsesek@chromium.org>2016-01-27 19:16:24 +0000
commit0c97b34adb439d638986d50769cba543e6ad5056 (patch)
treead63f3c0458bbaba260dfd6c230af9404c2f845b
parent9cb6b773d692650216f6dfb32c6b41943ee72c08 (diff)
downloadchromium_src-0c97b34adb439d638986d50769cba543e6ad5056.zip
chromium_src-0c97b34adb439d638986d50769cba543e6ad5056.tar.gz
chromium_src-0c97b34adb439d638986d50769cba543e6ad5056.tar.bz2
[Linux] Do not try to call readdir() on a null DIR* in base::ProcessIterator.
BUG=581517 R=thakis@chromium.org Review URL: https://codereview.chromium.org/1642663003 . Cr-Commit-Position: refs/heads/master@{#371837}
-rw-r--r--base/process/process_iterator_linux.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/base/process/process_iterator_linux.cc b/base/process/process_iterator_linux.cc
index 94a3576..421565f 100644
--- a/base/process/process_iterator_linux.cc
+++ b/base/process/process_iterator_linux.cc
@@ -61,18 +61,28 @@ bool GetProcCmdline(pid_t pid, std::vector<std::string>* proc_cmd_line_args) {
ProcessIterator::ProcessIterator(const ProcessFilter* filter)
: filter_(filter) {
procfs_dir_ = opendir(internal::kProcDir);
+ if (!procfs_dir_) {
+ // On Android, SELinux may prevent reading /proc. See
+ // https://crbug.com/581517 for details.
+ PLOG(ERROR) << "opendir " << internal::kProcDir;
+ }
}
ProcessIterator::~ProcessIterator() {
if (procfs_dir_) {
closedir(procfs_dir_);
- procfs_dir_ = NULL;
+ procfs_dir_ = nullptr;
}
}
bool ProcessIterator::CheckForNextProcess() {
// TODO(port): skip processes owned by different UID
+ if (!procfs_dir_) {
+ DLOG(ERROR) << "Skipping CheckForNextProcess(), no procfs_dir_";
+ return false;
+ }
+
pid_t pid = kNullProcessId;
std::vector<std::string> cmd_line_args;
std::string stats_data;