Messages in this thread | | | From | Ian Rogers <> | Date | Mon, 14 Aug 2023 13:24:06 -0700 | Subject | Re: [PATCH v2] perf stat-display: Check if snprintf()'s fmt argument is NULL |
| |
On Thu, Aug 3, 2023 at 7:10 PM Kaige Ye <ye@kaige.org> wrote: > > It is undefined behavior to pass NULL as snprintf()'s fmt argument. > Here is an example to trigger the problem: > > $ perf stat --metric-only -x, -e instructions -- sleep 1 > insn per cycle, > Segmentation fault (core dumped) > > With this patch: > > $ perf stat --metric-only -x, -e instructions -- sleep 1 > insn per cycle, > , > > Signed-off-by: Kaige Ye <ye@kaige.org>
Thanks Kaige!
Reviewed-by: Ian Rogers <irogers@google.com>
> --- > V1 -> V2: Addressed Ian's comments (Ian Rogers) > --- > tools/perf/util/stat-display.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c > index 7329b3340..031888545 100644 > --- a/tools/perf/util/stat-display.c > +++ b/tools/perf/util/stat-display.c > @@ -578,7 +578,7 @@ static void print_metric_only_csv(struct perf_stat_config *config __maybe_unused > if (!valid_only_metric(unit)) > return; > unit = fixunit(tbuf, os->evsel, unit); > - snprintf(buf, sizeof buf, fmt, val); > + snprintf(buf, sizeof(buf), fmt ?: "", val); > ends = vals = skip_spaces(buf); > while (isdigit(*ends) || *ends == '.') > ends++; > @@ -600,7 +600,7 @@ static void print_metric_only_json(struct perf_stat_config *config __maybe_unuse > if (!valid_only_metric(unit)) > return; > unit = fixunit(tbuf, os->evsel, unit); > - snprintf(buf, sizeof(buf), fmt, val); > + snprintf(buf, sizeof(buf), fmt ?: "", val); > ends = vals = skip_spaces(buf); > while (isdigit(*ends) || *ends == '.') > ends++; > > base-commit: f6b8436bede3e80226e8b2100279c4450c73806a > -- > 2.41.0 >
| |