mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-04 20:57:45 -04:00
perf build-id: Ensure struct build_id is empty before use
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>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user