• Ian Rogers's avatar
    perf mem2node: Avoid double free related to realloc · 318af724
    Ian Rogers authored
    [ Upstream commit 266150c9 ]
    
    Realloc of size zero is a free not an error, avoid this causing a double
    free. Caught by clang's address sanitizer:
    
    ==2634==ERROR: AddressSanitizer: attempting double-free on 0x6020000015f0 in thread T0:
        #0 0x5649659297fd in free llvm/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:123:3
        #1 0x5649659e9251 in __zfree tools/lib/zalloc.c:13:2
        #2 0x564965c0f92c in mem2node__exit tools/perf/util/mem2node.c:114:2
        #3 0x564965a08b4c in perf_c2c__report tools/perf/builtin-c2c.c:2867:2
        #4 0x564965a0616a in cmd_c2c tools/perf/builtin-c2c.c:2989:10
        #5 0x564965944348 in run_builtin tools/perf/perf.c:312:11
        #6 0x564965943235 in handle_internal_command tools/perf/perf.c:364:8
        #7 0x5649659440c4 in run_argv tools/perf/perf.c:408:2
        #8 0x564965942e41 in main tools/perf/perf.c:538:3
    
    0x6020000015f0 is located 0 bytes inside of 1-byte region [0x6020000015f0,0x6020000015f1)
    freed by thread T0 here:
        #0 0x564965929da3 in realloc third_party/llvm/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:164:3
        #1 0x564965c0f55e in mem2node__init tools/perf/util/mem2node.c:97:16
        #2 0x564965a08956 in perf_c2c__report tools/perf/builtin-c2c.c:2803:8
        #3 0x564965a0616a in cmd_c2c tools/perf/builtin-c2c.c:2989:10
        #4 0x564965944348 in run_builtin tools/perf/perf.c:312:11
        #5 0x564965943235 in handle_internal_command tools/perf/perf.c:364:8
        #6 0x5649659440c4 in run_argv tools/perf/perf.c:408:2
        #7 0x564965942e41 in main tools/perf/perf.c:538:3
    
    previously allocated by thread T0 here:
        #0 0x564965929c42 in calloc third_party/llvm/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:154:3
        #1 0x5649659e9220 in zalloc tools/lib/zalloc.c:8:9
        #2 0x564965c0f32d in mem2node__init tools/perf/util/mem2node.c:61:12
        #3 0x564965a08956 in perf_c2c__report tools/perf/builtin-c2c.c:2803:8
        #4 0x564965a0616a in cmd_c2c tools/perf/builtin-c2c.c:2989:10
        #5 0x564965944348 in run_builtin tools/perf/perf.c:312:11
        #6 0x564965943235 in handle_internal_command tools/perf/perf.c:364:8
        #7 0x5649659440c4 in run_argv tools/perf/perf.c:408:2
        #8 0x564965942e41 in main tools/perf/perf.c:538:3
    
    v2: add a WARN_ON_ONCE when the free condition arises.
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: clang-built-linux@googlegroups.com
    Link: http://lore.kernel.org/lkml/20200320182347.87675-1-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    318af724
mem2node.c 2.72 KB