lkml.org 
[lkml]   [2019]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [patch] perf report segfault with 0-sized strings
Em Thu, Jul 25, 2019 at 02:27:14PM -0400, Vince Weaver escreveu:
> Hello,
>
> the perf_data_fuzzer found an issue when strings have size 0.
> malloc() in do_read_string() is happy to allocate a string of
> size 0 but when code (in this case the pmu parser) tries to work with
> those it will segfault.

So here are two fixes, i.e. one is to make do_read_string() to return
NULL when len is 0, which do_read_string() already returns for failure
(NULL) and most of the callers I looked handle that.

The other is to make print_pmu_mappings() deal with a NULL
ff->ph->env.pmu_mappings, agreed?

- Arnaldo

> Signed-off-by: Vince Weaver <vincent.weaver@maine.edu>
>
> diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
> index c24db7f4909c..641129efa987 100644
> --- a/tools/perf/util/header.c
> +++ b/tools/perf/util/header.c
> @@ -251,6 +252,9 @@ static char *do_read_string(struct feat_fd *ff)
> if (do_read_u32(ff, &len))
> return NULL;
>
> + if (len==0)
> + return NULL;
> +
> buf = malloc(len);
> if (!buf)
> return NULL;
> @@ -1781,6 +1785,10 @@ static void print_pmu_mappings(struct feat_fd *ff, FILE *fp)
> str = ff->ph->env.pmu_mappings;
>
> while (pmu_num) {
> +
> + if (str==NULL)
> + goto error;
> +
> type = strtoul(str, &tmp, 0);
> if (*tmp != ':')
> goto error;

--

- Arnaldo

\
 
 \ /
  Last update: 2019-07-26 21:10    [W:0.040 / U:1.044 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site