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>
This commit is contained in:
Joshua Peraza 2018-10-31 09:49:04 -07:00 committed by Commit Bot
parent 96391cb80f
commit e00c42e63f

View File

@ -92,7 +92,7 @@ struct Dirent64 {
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";