• Vineet Gupta's avatar
    perf evsel: Don't rely on malloc working for sz 0 · 8d9cbd8f
    Vineet Gupta authored
    When running perf on ARC (uClibc based userspace), ran into this issue
       ------------->8----------------
    	[ARCLinux]$ ./perf record ls
    	bin             etc             perf            sys
    	debug           init            perf.data       tmp
    	[ perf record: Woken up 1 times to write data ]
    	[ perf record: Captured and wrote 0.001 MB perf.data (~24 samples) ]
    
    	[ARCLinux]$ ./perf report
    	incompatible file format (rerun with -v to learn more)
       ------------->8----------------
    
    The problem happens in the following call stack when zalloc is called
    with size zero
    
    glibc default / uClibc with MALLOC_GLIBC_COMPAT are OK, but not if that
    config option is not enabled.
    
      cmd_report
         perf_session__new
    	perf_session__open
    	    perf_session__read_header
    		read_attr(fd, header, &f_attr)
    		nr_ids = f_attr.ids.size / sizeof(u64); <-- 0
    		perf_evsel__alloc_id(vsel, 1, nr_ids)
    			zalloc(ncpus * nthreads * sizeof(u64)) <-- 0
    
    header.c: read_attr()
    
    (gdb) p *f_attr
    $17 = {
      attr = {
        type = 0,
        size = 96,
        config = 0,
        {
          sample_period = 4000,
          sample_freq = 4000
        },
    ...
      ids = {
        offset = 104,
        size = 0      <------
      }
    }
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    Suggested-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: Alexey Brodkin <Alexey.Brodkin@synopsys.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/1421156604-30603-5-git-send-email-vgupta@synopsys.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    8d9cbd8f
evsel.c 50.7 KB