From d05127172ce1f113230b1774119b6d54475dc158 Mon Sep 17 00:00:00 2001 From: Luis Hector Chavez Date: Wed, 14 Mar 2018 12:15:56 -0700 Subject: Avoid crashing when a directory does not exist This change adds a null-check for the DIR* object to avoid a crash when the directory cannot be opened for any reason. Bug: 74568776 Test: calling dumpstate early in the boot sequence no longer crashes Change-Id: I6c80f38dcf7890e607ce73e25a8ec0e16ba92586 --- cmds/dumpstate/dumpstate.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'cmds/dumpstate/dumpstate.cpp') diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp index 371533c4db..10f252fb7e 100644 --- a/cmds/dumpstate/dumpstate.cpp +++ b/cmds/dumpstate/dumpstate.cpp @@ -176,6 +176,11 @@ static std::vector* GetDumpFds(const std::string& dir_path, std::unique_ptr> dump_data(new std::vector()); std::unique_ptr dump_dir(opendir(dir_path.c_str()), closedir); + if (dump_dir == nullptr) { + MYLOGW("Unable to open directory %s: %s\n", dir_path.c_str(), strerror(errno)); + return dump_data.release(); + } + struct dirent* entry = nullptr; while ((entry = readdir(dump_dir.get()))) { if (entry->d_type != DT_REG) { @@ -191,13 +196,13 @@ static std::vector* GetDumpFds(const std::string& dir_path, android::base::unique_fd fd( TEMP_FAILURE_RETRY(open(abs_path.c_str(), O_RDONLY | O_CLOEXEC | O_NOFOLLOW | O_NONBLOCK))); if (fd == -1) { - MYLOGW("Unable to open dump file: %s %s\n", abs_path.c_str(), strerror(errno)); + MYLOGW("Unable to open dump file %s: %s\n", abs_path.c_str(), strerror(errno)); break; } struct stat st = {}; if (fstat(fd, &st) == -1) { - MYLOGW("Unable to stat dump file: %s %s\n", abs_path.c_str(), strerror(errno)); + MYLOGW("Unable to stat dump file %s: %s\n", abs_path.c_str(), strerror(errno)); continue; } -- cgit v1.2.3-59-g8ed1b