Messages in this thread Patch in this message | | | Date | Wed, 24 Jul 2019 15:49:53 -0700 | Subject | [RFC][PATCH 1/2] Fix event.c misaligned address error | From | Numfor Mbiziwo-Tiapo <> |
| |
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
| |