rootdev: Fix memory leak match_sysfs_device allocates a struct dirent that was used with readdir_r. When the function was converted to use readdir, the malloc wasn't removed, so this is now a memory leak. Remove the malloc entirely, since readdir returns a pointer to its own memory. BUG=b:225008839 TEST=FEATURES=test emerge-octopus rootdev Change-Id: I20325e8b4baebca7ea358ccd804f761aeda2bfa1 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/rootdev/+/3804964 Tested-by: Benjamin Gordon <bmgordon@chromium.org> Reviewed-by: Jordan Abrahams-Whitehead <ajordanr@google.com> Commit-Queue: Benjamin Gordon <bmgordon@chromium.org>
diff --git a/rootdev.c b/rootdev.c index 037140c..eae6212 100644 --- a/rootdev.c +++ b/rootdev.c
@@ -89,7 +89,7 @@ /* Walks sysfs and recurses into any directory/link that represents * a block device to find sub-devices (partitions) for dev. - * If dev == 0, the name fo the first device in the directory will be returned. + * If dev == 0, the name of the first device in the directory will be returned. * Returns the device's name in "name" */ static int match_sysfs_device(char *name, size_t name_len, const char *basedir, dev_t *dev, int depth) { @@ -133,15 +133,6 @@ return found; } - /* Allocate a properly sized entry. */ - entry = malloc(offsetof(struct dirent, d_name) + working_path_size); - if (!entry) { - warn("malloc(dirent)"); - free(working_path); - closedir(dirp); - return found; - } - while ((entry = readdir(dirp))) { size_t candidate_len = strlen(entry->d_name); size_t path_len = 0;