mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-27 19:53:15 -04:00
perf machine: Free scandir entries in guest kernel map creation
machines__create_guest_kernel_maps() calls scandir() which allocates
both the namelist array and each individual dirent entry. The code
frees the namelist array but not the individual entries, leaking memory
proportional to the number of directories under guestmount.
Free each namelist[i] after it is no longer needed.
Fixes: a1645ce12a ("perf: 'perf kvm' tool for monitoring guest performance from host")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Cc: Zhang, Yanmin <yanmin_zhang@linux.intel.com>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
committed by
Namhyung Kim
parent
29ec46e43f
commit
f53bf58dcd
@@ -1256,6 +1256,7 @@ int machines__create_guest_kernel_maps(struct machines *machines)
|
||||
for (i = 0; i < items; i++) {
|
||||
if (!isdigit(namelist[i]->d_name[0])) {
|
||||
/* Filter out . and .. */
|
||||
free(namelist[i]);
|
||||
continue;
|
||||
}
|
||||
errno = 0;
|
||||
@@ -1265,6 +1266,7 @@ int machines__create_guest_kernel_maps(struct machines *machines)
|
||||
(errno == ERANGE)) {
|
||||
pr_debug("invalid directory (%s). Skipping.\n",
|
||||
namelist[i]->d_name);
|
||||
free(namelist[i]);
|
||||
continue;
|
||||
}
|
||||
snprintf(path, sizeof(path), "%s/%s/proc/kallsyms",
|
||||
@@ -1272,9 +1274,11 @@ int machines__create_guest_kernel_maps(struct machines *machines)
|
||||
namelist[i]->d_name);
|
||||
if (access(path, R_OK)) {
|
||||
pr_debug("Can't access file %s\n", path);
|
||||
free(namelist[i]);
|
||||
continue;
|
||||
}
|
||||
machines__create_kernel_maps(machines, pid);
|
||||
free(namelist[i]);
|
||||
}
|
||||
free(namelist);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user