linux: use offset of d_name to get size of dirents
Dirents with short names can have a d_name that fits inside padding at
the end of Dirent64.
Change-Id: I18057dad01f5a7d4a063028ca9f61fbe89ae7fc0
Reviewed-on: https://chromium-review.googlesource.com/c/1310413
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Joshua Peraza <jperaza@chromium.org>
diff --git a/util/linux/ptrace_client.cc b/util/linux/ptrace_client.cc
index aa3e024..34fcbc3 100644
--- a/util/linux/ptrace_client.cc
+++ b/util/linux/ptrace_client.cc
@@ -92,7 +92,7 @@
void ReadDentsAsThreadIDs(char* buffer,
size_t size,
std::vector<pid_t>* threads) {
- while (size > sizeof(Dirent64)) {
+ while (size > offsetof(Dirent64, d_name)) {
auto dirent = reinterpret_cast<Dirent64*>(buffer);
if (size < dirent->d_reclen) {
LOG(ERROR) << "short dirent";