Messages in this thread | | | From | Ian Rogers <> | Date | Wed, 11 Sep 2019 02:08:32 -0700 | Subject | Re: [RFC][PATCH 1/2] Fix event.c misaligned address error |
| |
An idea here is that, if this breaks backward compatibility, we introduce an aligned variant and work to deprecate the unaligned variant. I will look into making a patch set.
Thanks, Ian
On Wed, Jul 24, 2019 at 3:50 PM Numfor Mbiziwo-Tiapo <nums@google.com> wrote: > > The ubsan (undefined behavior sanitizer) build of perf throws an > error when the synthesize "Synthesize cpu map" function from > perf test is run. > > This can be reproduced by running (from the tip directory): > make -C tools/perf USE_CLANG=1 EXTRA_CFLAGS="-fsanitize=undefined" > > (see cover letter for why perf may not build) > > then running: tools/perf/perf test 44 -v > > This bug occurs because the cpu_map_data__synthesize function in > event.c calls synthesize_mask, casting the 'data' variable > (of type cpu_map_data*) to a cpu_map_mask*. Since struct > cpu_map_data is 2 byte aligned and struct cpu_map_mask is 8 byte > aligned this causes memory alignment issues. > > This is fixed by adding 6 bytes of padding to the struct cpu_map_data, > however, this will break compatibility between perf data files - a file > written by an old perf wouldn't work with a perf with this patch due > to event data alignment changing. > > Comments? > > Not-Quite-Signed-off-by: Numfor Mbiziwo-Tiapo <nums@google.com> > --- > tools/perf/util/event.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/tools/perf/util/event.h b/tools/perf/util/event.h > index eb95f3384958..82eaf06c2604 100644 > --- a/tools/perf/util/event.h > +++ b/tools/perf/util/event.h > @@ -433,6 +433,7 @@ struct cpu_map_mask { > > struct cpu_map_data { > u16 type; > + u8 pad[6]; > char data[]; > }; > > -- > 2.22.0.657.g960e92d24f-goog >
| |