mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
perf machine: Use snprintf() for guestmount path construction
machines__findnew() and machines__create_guest_kernel_maps() use
sprintf() to build paths by prepending symbol_conf.guestmount.
Both write into PATH_MAX stack buffers, but guestmount comes from
user configuration and is not length-checked. A guestmount path
at or near PATH_MAX causes a stack buffer overflow.
Switch to snprintf() with sizeof() to prevent overflow. The
subsequent access()/fopen() calls will fail on a truncated path.
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>
This commit is contained in:
@@ -333,7 +333,7 @@ struct machine *machines__findnew(struct machines *machines, pid_t pid)
|
||||
if ((pid != HOST_KERNEL_ID) &&
|
||||
(pid != DEFAULT_GUEST_KERNEL_ID) &&
|
||||
(symbol_conf.guestmount)) {
|
||||
sprintf(path, "%s/%d", symbol_conf.guestmount, pid);
|
||||
snprintf(path, sizeof(path), "%s/%d", symbol_conf.guestmount, pid);
|
||||
if (access(path, R_OK)) {
|
||||
static struct strlist *seen;
|
||||
|
||||
@@ -1260,9 +1260,9 @@ int machines__create_guest_kernel_maps(struct machines *machines)
|
||||
namelist[i]->d_name);
|
||||
continue;
|
||||
}
|
||||
sprintf(path, "%s/%s/proc/kallsyms",
|
||||
symbol_conf.guestmount,
|
||||
namelist[i]->d_name);
|
||||
snprintf(path, sizeof(path), "%s/%s/proc/kallsyms",
|
||||
symbol_conf.guestmount,
|
||||
namelist[i]->d_name);
|
||||
ret = access(path, R_OK);
|
||||
if (ret) {
|
||||
pr_debug("Can't access file %s\n", path);
|
||||
|
||||
Reference in New Issue
Block a user