Messages in this thread Patch in this message | | | From | Arnaldo Carvalho de Melo <> | Date | Fri, 26 Jul 2019 16:00:16 -0300 | Subject | Re: [patch] perf tool divide by zero error if f_header.attr_size==0 |
| |
Em Tue, Jul 23, 2019 at 11:06:01AM -0400, Vince Weaver escreveu: > Hello > > so I have been having lots of trouble with hand-crafted perf.data files > causing segfaults and the like, so I have started fuzzing the perf tool. > > First issue found: > > If f_header.attr_size is 0 in the perf.data file, then perf will crash > with a divide-by-zero error. > > Signed-off-by: Vince Weaver <vincent.weaver@maine.edu>
I added this on top:
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 25f89d0790fe..47877f0f6667 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -3560,6 +3560,9 @@ int perf_session__read_header(struct perf_session *session) }
if (f_header.attr_size == 0) { + pr_err("ERROR: The %s file's attr size field is 0 which is unexpected.\n" + "Was the 'perf record' command properly terminated?\n", + data->file.path); return -EINVAL; }
[acme@quaco perf]$ Thanks, applied.
- Arnaldo
> > diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c > index c24db7f4909c..26df60ee9460 100644 > --- a/tools/perf/util/header.c > +++ b/tools/perf/util/header.c > @@ -3559,6 +3559,10 @@ int perf_session__read_header(struct perf_session *session) > data->file.path); > } > > + if (f_header.attr_size == 0) { > + return -EINVAL; > + } > + > nr_attrs = f_header.attrs.size / f_header.attr_size; > lseek(fd, f_header.attrs.offset, SEEK_SET); >
--
- Arnaldo
| |