]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tools lib api: Fix mount_overload() snprintf truncation and toupper range
authorArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 8 Jun 2026 11:10:18 +0000 (08:10 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 10 Jun 2026 21:56:02 +0000 (18:56 -0300)
mount_overload() builds an environment variable name like
"PERF_SYSFS_ENVIRONMENT" from fs->name.  Two bugs:

1) snprintf() uses name_len as the buffer size instead of sizeof(upper_name).
   For fs->name = "sysfs" (len=5), the output is truncated to "PERF" (4
   chars + null), so getenv() never finds the intended variable.

2) mem_toupper() only uppercases name_len bytes, converting just the "PERF"
   prefix rather than the full string including the filesystem name portion.

Fix by using sizeof(upper_name) for snprintf and strlen(upper_name) for
mem_toupper, so the full "PERF_SYSFS_ENVIRONMENT" string is correctly
formatted and uppercased.

Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Fixes: 73ca85ad364769ff ("tools lib api fs: Add FSTYPE__mount() method")
Cc: Jiri Olsa <jolsa@kernel.org>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/lib/api/fs/fs.c

index d16911818d4d35696c5af027c50de8fe11280d73..cbd8eab0d1df0c6b730f245728b045c506fc3efa 100644 (file)
@@ -261,8 +261,8 @@ static const char *mount_overload(struct fs *fs)
        /* "PERF_" + name + "_ENVIRONMENT" + '\0' */
        char upper_name[5 + name_len + 12 + 1];
 
-       snprintf(upper_name, name_len, "PERF_%s_ENVIRONMENT", fs->name);
-       mem_toupper(upper_name, name_len);
+       snprintf(upper_name, sizeof(upper_name), "PERF_%s_ENVIRONMENT", fs->name);
+       mem_toupper(upper_name, strlen(upper_name));
 
        return getenv(upper_name) ?: *fs->mounts;
 }