]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
perf build-id: Ensure struct build_id is empty before use
authorIan Rogers <irogers@google.com>
Thu, 24 Jul 2025 16:32:45 +0000 (09:32 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Fri, 25 Jul 2025 17:37:55 +0000 (10:37 -0700)
If a build ID is read then not all code paths may ensure it is empty
before use. Initialize the build_id to be zero-ed unless there is
clear initialization such as a call to build_id__init.

Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250724163302.596743-6-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/bench/inject-buildid.c
tools/perf/builtin-buildid-cache.c
tools/perf/tests/pe-file-parsing.c
tools/perf/tests/sdt.c
tools/perf/util/build-id.c
tools/perf/util/debuginfo.c
tools/perf/util/probe-event.c
tools/perf/util/probe-finder.c
tools/perf/util/symbol-minimal.c
tools/perf/util/symbol.c
tools/perf/util/synthetic-events.c

index f55c07e4be9411361fbc0f12ad55259b0e5ed950..aad572a78d7fcfdf5091d1d0be09f2e3e0365e08 100644 (file)
@@ -80,7 +80,7 @@ static int add_dso(const char *fpath, const struct stat *sb __maybe_unused,
                   int typeflag, struct FTW *ftwbuf __maybe_unused)
 {
        struct bench_dso *dso = &dsos[nr_dsos];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
 
        if (typeflag == FTW_D || typeflag == FTW_SL)
                return 0;
index 3f7739b21148bddc3b751b30215480fd9108d2c9..e936a34b7d37ba576a7205f30d0dd7c37eb2bd1d 100644 (file)
@@ -175,7 +175,7 @@ static int build_id_cache__add_kcore(const char *filename, bool force)
 static int build_id_cache__add_file(const char *filename, struct nsinfo *nsi)
 {
        char sbuild_id[SBUILD_ID_SIZE];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        int err;
        struct nscookie nsc;
 
@@ -198,7 +198,7 @@ static int build_id_cache__add_file(const char *filename, struct nsinfo *nsi)
 static int build_id_cache__remove_file(const char *filename, struct nsinfo *nsi)
 {
        char sbuild_id[SBUILD_ID_SIZE];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        struct nscookie nsc;
 
        int err;
@@ -275,7 +275,7 @@ static int build_id_cache__purge_all(void)
 static bool dso__missing_buildid_cache(struct dso *dso, int parm __maybe_unused)
 {
        char filename[PATH_MAX];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
 
        if (!dso__build_id_filename(dso, filename, sizeof(filename), false))
                return true;
@@ -303,7 +303,7 @@ static int build_id_cache__fprintf_missing(struct perf_session *session, FILE *f
 static int build_id_cache__update_file(const char *filename, struct nsinfo *nsi)
 {
        char sbuild_id[SBUILD_ID_SIZE];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        struct nscookie nsc;
 
        int err;
index fff58b220c07be6d2d3c36ff3a4cc835d1ecf76c..30c7da79e109b480215c81c3522370ab571d6b90 100644 (file)
@@ -24,7 +24,7 @@ static int run_dir(const char *d)
 {
        char filename[PATH_MAX];
        char debugfile[PATH_MAX];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        char debuglink[PATH_MAX];
        char expect_build_id[] = {
                0x5a, 0x0f, 0xd8, 0x82, 0xb5, 0x30, 0x84, 0x22,
index 663c8f700069d42b31e8862edd5dd9a4117a04a7..93baee2eae42ab989f96d5f44e0c9b743643bb9e 100644 (file)
@@ -28,7 +28,7 @@ static int target_function(void)
 static int build_id_cache__add_file(const char *filename)
 {
        char sbuild_id[SBUILD_ID_SIZE];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        int err;
 
        err = filename__read_build_id(filename, &bid);
index 3386fa8e1e7e8b412d04c5ba96cfa35448a66899..1abd5a67066589c92b2cd53100f7458d7f024c85 100644 (file)
@@ -95,7 +95,7 @@ int build_id__snprintf(const struct build_id *build_id, char *bf, size_t bf_size
 int sysfs__snprintf_build_id(const char *root_dir, char *sbuild_id, size_t sbuild_id_size)
 {
        char notes[PATH_MAX];
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        int ret;
 
        if (!root_dir)
@@ -112,7 +112,7 @@ int sysfs__snprintf_build_id(const char *root_dir, char *sbuild_id, size_t sbuil
 
 int filename__snprintf_build_id(const char *pathname, char *sbuild_id, size_t sbuild_id_size)
 {
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        int ret;
 
        ret = filename__read_build_id(pathname, &bid);
@@ -849,7 +849,7 @@ static int filename__read_build_id_ns(const char *filename,
 
 static bool dso__build_id_mismatch(struct dso *dso, const char *name)
 {
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        bool ret = false;
 
        mutex_lock(dso__lock(dso));
index b5deea7cbdf24620472aa1cd18594029971f0b74..a44c70f931568ca58962301014c9d5cfd0dc75d0 100644 (file)
@@ -103,7 +103,7 @@ struct debuginfo *debuginfo__new(const char *path)
        char buf[PATH_MAX], nil = '\0';
        struct dso *dso;
        struct debuginfo *dinfo = NULL;
-       struct build_id bid;
+       struct build_id bid = { .size = 0};
 
        /* Try to open distro debuginfo files */
        dso = dso__new(path);
index c10549fc451b508bfc0b5364aa8e65e6a6a51e12..57ad150f8c4369c062e83bd5cb9d32a498dd8f39 100644 (file)
@@ -1063,7 +1063,6 @@ static int sprint_line_description(char *sbuf, size_t size, struct line_range *l
 static int __show_line_range(struct line_range *lr, const char *module,
                             bool user)
 {
-       struct build_id bid;
        int l = 1;
        struct int_node *ln;
        struct debuginfo *dinfo;
@@ -1088,6 +1087,8 @@ static int __show_line_range(struct line_range *lr, const char *module,
                        ret = -ENOENT;
        }
        if (dinfo->build_id) {
+               struct build_id bid;
+
                build_id__init(&bid, dinfo->build_id, BUILD_ID_SIZE);
                build_id__snprintf(&bid, sbuild_id, sizeof(sbuild_id));
        }
index b74f6fe24bb61af8f93222697ecf832212c12dfa..5ffd97ee4898e51eee1d6a51de930a4e25432320 100644 (file)
@@ -848,7 +848,6 @@ static int probe_point_lazy_walker(const char *fname, int lineno,
 /* Find probe points from lazy pattern  */
 static int find_probe_point_lazy(Dwarf_Die *sp_die, struct probe_finder *pf)
 {
-       struct build_id bid;
        char sbuild_id[SBUILD_ID_SIZE] = "";
        int ret = 0;
        char *fpath;
@@ -858,6 +857,8 @@ static int find_probe_point_lazy(Dwarf_Die *sp_die, struct probe_finder *pf)
 
                comp_dir = cu_get_comp_dir(&pf->cu_die);
                if (pf->dbg->build_id) {
+                       struct build_id bid;
+
                        build_id__init(&bid, pf->dbg->build_id, BUILD_ID_SIZE);
                        build_id__snprintf(&bid, sbuild_id, sizeof(sbuild_id));
                }
index c73fe2e09fe91a004cf4c3df85977f30a7949fa5..7201494c5c20d91e3904b32990486ac1aee82305 100644 (file)
@@ -317,7 +317,7 @@ int dso__load_sym(struct dso *dso, struct map *map __maybe_unused,
                  struct symsrc *runtime_ss __maybe_unused,
                  int kmodule __maybe_unused)
 {
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        int ret;
 
        ret = fd__is_64_bit(ss->fd);
index 573c65da9fe0b6b51e3ebc054ea7e54653f171d0..e816e4220d330d6e2207d86a301be02ed0037432 100644 (file)
@@ -1813,7 +1813,6 @@ int dso__load(struct dso *dso, struct map *map)
        struct symsrc *syms_ss = NULL, *runtime_ss = NULL;
        bool kmod;
        bool perfmap;
-       struct build_id bid;
        struct nscookie nsc;
        char newmapname[PATH_MAX];
        const char *map_path = dso__long_name(dso);
@@ -1874,6 +1873,8 @@ int dso__load(struct dso *dso, struct map *map)
         */
        if (!dso__has_build_id(dso) &&
            is_regular_file(dso__long_name(dso))) {
+               struct build_id bid = { .size = 0, };
+
                __symbol__join_symfs(name, PATH_MAX, dso__long_name(dso));
                if (filename__read_build_id(name, &bid) > 0)
                        dso__set_build_id(dso, &bid);
@@ -2122,7 +2123,7 @@ static bool filename__readable(const char *file)
 
 static char *dso__find_kallsyms(struct dso *dso, struct map *map)
 {
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        char sbuild_id[SBUILD_ID_SIZE];
        bool is_host = false;
        char path[PATH_MAX];
index d3c4541746020b141a910ff61cdd77edaad31a90..d6f9a4548c92289272e9dafa9e390af5f176532f 100644 (file)
@@ -368,7 +368,7 @@ static void perf_record_mmap2__read_build_id(struct perf_record_mmap2 *event,
                                             struct machine *machine,
                                             bool is_kernel)
 {
-       struct build_id bid;
+       struct build_id bid = { .size = 0, };
        struct nsinfo *nsi;
        struct nscookie nc;
        struct dso *dso = NULL;