Skip to content

Commit fccaaf6

Browse files
captain5050namhyung
authored andcommitted
perf build-id: Change sprintf functions to snprintf
Pass in a size argument rather than implying all build id strings must be SBUILD_ID_SIZE. Signed-off-by: Ian Rogers <[email protected]> Link: https://lore.kernel.org/r/[email protected] [ fixed some build errors ] Signed-off-by: Namhyung Kim <[email protected]>
1 parent 5a2ceeb commit fccaaf6

File tree

16 files changed

+42
-50
lines changed

16 files changed

+42
-50
lines changed

tools/perf/builtin-buildid-cache.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#include <linux/string.h>
3232
#include <linux/err.h>
3333

34-
static int build_id_cache__kcore_buildid(const char *proc_dir, char *sbuildid)
34+
static int build_id_cache__kcore_buildid(const char *proc_dir, char *sbuildid, size_t sbuildid_size)
3535
{
3636
char root_dir[PATH_MAX];
3737
char *p;
@@ -42,7 +42,7 @@ static int build_id_cache__kcore_buildid(const char *proc_dir, char *sbuildid)
4242
if (!p)
4343
return -1;
4444
*p = '\0';
45-
return sysfs__sprintf_build_id(root_dir, sbuildid);
45+
return sysfs__snprintf_build_id(root_dir, sbuildid, sbuildid_size);
4646
}
4747

4848
static int build_id_cache__kcore_dir(char *dir, size_t sz)
@@ -128,7 +128,7 @@ static int build_id_cache__add_kcore(const char *filename, bool force)
128128
return -1;
129129
*p = '\0';
130130

131-
if (build_id_cache__kcore_buildid(from_dir, sbuildid) < 0)
131+
if (build_id_cache__kcore_buildid(from_dir, sbuildid, sizeof(sbuildid)) < 0)
132132
return -1;
133133

134134
scnprintf(to_dir, sizeof(to_dir), "%s/%s/%s",
@@ -187,7 +187,7 @@ static int build_id_cache__add_file(const char *filename, struct nsinfo *nsi)
187187
return -1;
188188
}
189189

190-
build_id__sprintf(&bid, sbuild_id);
190+
build_id__snprintf(&bid, sbuild_id, sizeof(sbuild_id));
191191
err = build_id_cache__add_s(sbuild_id, filename, nsi,
192192
false, false);
193193
pr_debug("Adding %s %s: %s\n", sbuild_id, filename,
@@ -211,7 +211,7 @@ static int build_id_cache__remove_file(const char *filename, struct nsinfo *nsi)
211211
return -1;
212212
}
213213

214-
build_id__sprintf(&bid, sbuild_id);
214+
build_id__snprintf(&bid, sbuild_id, sizeof(sbuild_id));
215215
err = build_id_cache__remove_s(sbuild_id);
216216
pr_debug("Removing %s %s: %s\n", sbuild_id, filename,
217217
err ? "FAIL" : "Ok");
@@ -317,7 +317,7 @@ static int build_id_cache__update_file(const char *filename, struct nsinfo *nsi)
317317
}
318318
err = 0;
319319

320-
build_id__sprintf(&bid, sbuild_id);
320+
build_id__snprintf(&bid, sbuild_id, sizeof(sbuild_id));
321321
if (build_id_cache__cached(sbuild_id))
322322
err = build_id_cache__remove_s(sbuild_id);
323323

tools/perf/builtin-buildid-list.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ static int buildid__map_cb(struct map *map, void *arg __maybe_unused)
3131

3232
memset(bid_buf, 0, sizeof(bid_buf));
3333
if (dso__has_build_id(dso))
34-
build_id__sprintf(dso__bid_const(dso), bid_buf);
34+
build_id__snprintf(dso__bid_const(dso), bid_buf, sizeof(bid_buf));
3535
printf("%s %16" PRIx64 " %16" PRIx64, bid_buf, map__start(map), map__end(map));
3636
if (dso_long_name != NULL)
3737
printf(" %s", dso_long_name);
@@ -57,7 +57,7 @@ static int sysfs__fprintf_build_id(FILE *fp)
5757
char sbuild_id[SBUILD_ID_SIZE];
5858
int ret;
5959

60-
ret = sysfs__sprintf_build_id("/", sbuild_id);
60+
ret = sysfs__snprintf_build_id("/", sbuild_id, sizeof(sbuild_id));
6161
if (ret != sizeof(sbuild_id))
6262
return ret < 0 ? ret : -EINVAL;
6363

@@ -69,7 +69,7 @@ static int filename__fprintf_build_id(const char *name, FILE *fp)
6969
char sbuild_id[SBUILD_ID_SIZE];
7070
int ret;
7171

72-
ret = filename__sprintf_build_id(name, sbuild_id);
72+
ret = filename__snprintf_build_id(name, sbuild_id, sizeof(sbuild_id));
7373
if (ret != sizeof(sbuild_id))
7474
return ret < 0 ? ret : -EINVAL;
7575

tools/perf/tests/sdt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ static int build_id_cache__add_file(const char *filename)
3737
return err;
3838
}
3939

40-
build_id__sprintf(&bid, sbuild_id);
40+
build_id__snprintf(&bid, sbuild_id, sizeof(sbuild_id));
4141
err = build_id_cache__add_s(sbuild_id, filename, NULL, false, false);
4242
if (err < 0)
4343
pr_debug("Failed to add build id cache of %s\n", filename);

tools/perf/util/build-id.c

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -67,24 +67,17 @@ int build_id__mark_dso_hit(const struct perf_tool *tool __maybe_unused,
6767
return 0;
6868
}
6969

70-
int build_id__sprintf(const struct build_id *build_id, char *bf)
70+
int build_id__snprintf(const struct build_id *build_id, char *bf, size_t bf_size)
7171
{
72-
char *bid = bf;
73-
const u8 *raw = build_id->data;
74-
size_t i;
75-
76-
bf[0] = 0x0;
72+
size_t offs = 0;
7773

78-
for (i = 0; i < build_id->size; ++i) {
79-
sprintf(bid, "%02x", *raw);
80-
++raw;
81-
bid += 2;
82-
}
74+
for (size_t i = 0; i < build_id->size && offs < bf_size; ++i)
75+
offs += snprintf(bf + offs, bf_size - offs, "%02x", build_id->data[i]);
8376

84-
return (bid - bf) + 1;
77+
return offs;
8578
}
8679

87-
int sysfs__sprintf_build_id(const char *root_dir, char *sbuild_id)
80+
int sysfs__snprintf_build_id(const char *root_dir, char *sbuild_id, size_t sbuild_id_size)
8881
{
8982
char notes[PATH_MAX];
9083
struct build_id bid;
@@ -99,10 +92,10 @@ int sysfs__sprintf_build_id(const char *root_dir, char *sbuild_id)
9992
if (ret < 0)
10093
return ret;
10194

102-
return build_id__sprintf(&bid, sbuild_id);
95+
return build_id__snprintf(&bid, sbuild_id, sbuild_id_size);
10396
}
10497

105-
int filename__sprintf_build_id(const char *pathname, char *sbuild_id)
98+
int filename__snprintf_build_id(const char *pathname, char *sbuild_id, size_t sbuild_id_size)
10699
{
107100
struct build_id bid;
108101
int ret;
@@ -111,7 +104,7 @@ int filename__sprintf_build_id(const char *pathname, char *sbuild_id)
111104
if (ret < 0)
112105
return ret;
113106

114-
return build_id__sprintf(&bid, sbuild_id);
107+
return build_id__snprintf(&bid, sbuild_id, sbuild_id_size);
115108
}
116109

117110
/* asnprintf consolidates asprintf and snprintf */
@@ -212,9 +205,9 @@ static bool build_id_cache__valid_id(char *sbuild_id)
212205
return false;
213206

214207
if (!strcmp(pathname, DSO__NAME_KALLSYMS))
215-
ret = sysfs__sprintf_build_id("/", real_sbuild_id);
208+
ret = sysfs__snprintf_build_id("/", real_sbuild_id, sizeof(real_sbuild_id));
216209
else if (pathname[0] == '/')
217-
ret = filename__sprintf_build_id(pathname, real_sbuild_id);
210+
ret = filename__snprintf_build_id(pathname, real_sbuild_id, sizeof(real_sbuild_id));
218211
else
219212
ret = -EINVAL; /* Should we support other special DSO cache? */
220213
if (ret >= 0)
@@ -243,7 +236,7 @@ char *__dso__build_id_filename(const struct dso *dso, char *bf, size_t size,
243236
if (!dso__has_build_id(dso))
244237
return NULL;
245238

246-
build_id__sprintf(dso__bid_const(dso), sbuild_id);
239+
build_id__snprintf(dso__bid_const(dso), sbuild_id, sizeof(sbuild_id));
247240
linkname = build_id_cache__linkname(sbuild_id, NULL, 0);
248241
if (!linkname)
249242
return NULL;
@@ -769,7 +762,7 @@ static int build_id_cache__add_b(const struct build_id *bid,
769762
{
770763
char sbuild_id[SBUILD_ID_SIZE];
771764

772-
build_id__sprintf(bid, sbuild_id);
765+
build_id__snprintf(bid, sbuild_id, sizeof(sbuild_id));
773766

774767
return __build_id_cache__add_s(sbuild_id, name, nsi, is_kallsyms,
775768
is_vdso, proper_name, root_dir);

tools/perf/util/build-id.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ struct feat_fd;
2121
struct nsinfo;
2222

2323
void build_id__init(struct build_id *bid, const u8 *data, size_t size);
24-
int build_id__sprintf(const struct build_id *build_id, char *bf);
24+
int build_id__snprintf(const struct build_id *build_id, char *bf, size_t bf_size);
2525
bool build_id__is_defined(const struct build_id *bid);
26-
int sysfs__sprintf_build_id(const char *root_dir, char *sbuild_id);
27-
int filename__sprintf_build_id(const char *pathname, char *sbuild_id);
26+
int sysfs__snprintf_build_id(const char *root_dir, char *sbuild_id, size_t sbuild_id_size);
27+
int filename__snprintf_build_id(const char *pathname, char *sbuild_id, size_t sbuild_id_size);
2828
char *build_id_cache__kallsyms_path(const char *sbuild_id, char *bf,
2929
size_t size);
3030

tools/perf/util/disasm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1218,7 +1218,7 @@ int symbol__strerror_disassemble(struct map_symbol *ms, int errnum, char *buf, s
12181218
char *build_id_msg = NULL;
12191219

12201220
if (dso__has_build_id(dso)) {
1221-
build_id__sprintf(dso__bid(dso), bf + 15);
1221+
build_id__snprintf(dso__bid(dso), bf + 15, sizeof(bf) - 15);
12221222
build_id_msg = bf;
12231223
}
12241224
scnprintf(buf, buflen,

tools/perf/util/dso.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ int dso__read_binary_type_filename(const struct dso *dso,
217217
break;
218218
}
219219

220-
build_id__sprintf(dso__bid_const(dso), build_id_hex);
220+
build_id__snprintf(dso__bid_const(dso), build_id_hex, sizeof(build_id_hex));
221221
len = __symbol__join_symfs(filename, size, "/usr/lib/debug/.build-id/");
222222
snprintf(filename + len, size - len, "%.2s/%s.debug",
223223
build_id_hex, build_id_hex + 2);
@@ -1708,7 +1708,7 @@ static size_t dso__fprintf_buildid(struct dso *dso, FILE *fp)
17081708
{
17091709
char sbuild_id[SBUILD_ID_SIZE];
17101710

1711-
build_id__sprintf(dso__bid(dso), sbuild_id);
1711+
build_id__snprintf(dso__bid(dso), sbuild_id, sizeof(sbuild_id));
17121712
return fprintf(fp, "%s", sbuild_id);
17131713
}
17141714

tools/perf/util/dsos.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ static int dsos__fprintf_buildid_cb(struct dso *dso, void *data)
373373

374374
if (args->skip && args->skip(dso, args->parm))
375375
return 0;
376-
build_id__sprintf(dso__bid(dso), sbuild_id);
376+
build_id__snprintf(dso__bid(dso), sbuild_id, sizeof(sbuild_id));
377377
args->ret += fprintf(args->fp, "%-40s %s\n", sbuild_id, dso__long_name(dso));
378378
return 0;
379379
}

tools/perf/util/event.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp)
334334

335335
build_id__init(&bid, event->mmap2.build_id,
336336
event->mmap2.build_id_size);
337-
build_id__sprintf(&bid, sbuild_id);
337+
build_id__snprintf(&bid, sbuild_id, sizeof(sbuild_id));
338338

339339
return fprintf(fp, " %d/%d: [%#" PRI_lx64 "(%#" PRI_lx64 ") @ %#" PRI_lx64
340340
" <%s>]: %c%c%c%c %s\n",

tools/perf/util/header.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2303,7 +2303,7 @@ static int __event_process_build_id(struct perf_record_header_build_id *bev,
23032303
free(m.name);
23042304
}
23052305

2306-
build_id__sprintf(dso__bid(dso), sbuild_id);
2306+
build_id__snprintf(dso__bid(dso), sbuild_id, sizeof(sbuild_id));
23072307
pr_debug("build id event received for %s: %s [%zu]\n",
23082308
dso__long_name(dso), sbuild_id, size);
23092309
dso__put(dso);

0 commit comments

Comments
 (0)