Messages in this thread | | | From | Arnaldo Carvalho de Melo <> | Date | Fri, 26 Jul 2019 16:09:53 -0300 | Subject | Re: [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
| |