perf machine: Use path__join() to compose a path instead of snprintf(dir, '/', filename) 85/292585/1
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 18 Jan 2022 12:02:43 +0000 (09:02 -0300)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 9 May 2023 09:23:43 +0000 (18:23 +0900)
Its more intention revealing, and if we're interested in the odd cases
where this may end up truncating we can do debug checks at one
centralized place.

Motivation, of all the container builds, fedora rawhide started
complaining of:

  util/machine.c: In function ‘machine__create_modules’:
  util/machine.c:1419:50: error: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size between 0 and 4095 [-Werror=format-truncation=]
   1419 |                 snprintf(path, sizeof(path), "%s/%s", dir_name, dent->d_name);
        |                                                  ^~
  In file included from /usr/include/stdio.h:894,
                   from util/branch.h:9,
                   from util/callchain.h:8,
                   from util/machine.c:7:
  In function ‘snprintf’,
      inlined from ‘maps__set_modules_path_dir’ at util/machine.c:1419:3,
      inlined from ‘machine__set_modules_path’ at util/machine.c:1473:9,
      inlined from ‘machine__create_modules’ at util/machine.c:1519:7:
  /usr/include/bits/stdio2.h:71:10: note: ‘__builtin___snprintf_chk’ output between 2 and 4352 bytes into a destination of size 4096

There are other places where we should use path__join(), but lets get rid of
this one first.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Acked-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/YebZKjwgfdOz0lAs@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[sw0312.kim: backport upstream commit 9d5f0c36438e to resolve gcc-12 build issue]
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Change-Id: Id4f265f2e11357acf0f0fcc1054a484e2bfc25ff

tools/perf/util/machine.c

index 6072b7d76967afb734b6ea89a191f7e076b58801..1f05f90ffb7820c1dbebea7dfbad47c5ad86442f 100644 (file)
@@ -5,6 +5,7 @@
 #include "hist.h"
 #include "machine.h"
 #include "map.h"
+#include "util.h"
 #include "sort.h"
 #include "strlist.h"
 #include "thread.h"
@@ -1016,7 +1017,7 @@ static int map_groups__set_modules_path_dir(struct map_groups *mg,
                struct stat st;
 
                /*sshfs might return bad dent->d_type, so we have to stat*/
-               snprintf(path, sizeof(path), "%s/%s", dir_name, dent->d_name);
+               path__join(path, sizeof(path), dir_name, dent->d_name);
                if (stat(path, &st))
                        continue;