• Song Liu's avatar
    perf header: Assign proper ff->ph in perf_event__synthesize_features() · 5f2bad57
    Song Liu authored
    commit c952b35f upstream.
    
    bpf/btf write_* functions need ff->ph->env.
    
    With this missing, pipe-mode (perf record -o -)  would crash like:
    
    Program terminated with signal SIGSEGV, Segmentation fault.
    
    This patch assign proper ph value to ff.
    
    Committer testing:
    
      (gdb) run record -o -
      Starting program: /root/bin/perf record -o -
      PERFILE2
      <SNIP start of perf.data headers>
      Thread 1 "perf" received signal SIGSEGV, Segmentation fault.
      __do_write_buf (size=4, buf=0x160, ff=0x7fffffff8f80) at util/header.c:126
      126		memcpy(ff->buf + ff->offset, buf, size);
      (gdb) bt
      #0  __do_write_buf (size=4, buf=0x160, ff=0x7fffffff8f80) at util/header.c:126
      #1  do_write (ff=ff@entry=0x7fffffff8f80, buf=buf@entry=0x160, size=4) at util/header.c:137
      #2  0x00000000004eddba in write_bpf_prog_info (ff=0x7fffffff8f80, evlist=<optimized out>) at util/header.c:912
      #3  0x00000000004f69d7 in perf_event__synthesize_features (tool=tool@entry=0x97cc00 <record>, session=session@entry=0x7fffe9c6d010,
          evlist=0x7fffe9cae010, process=process@entry=0x4435d0 <process_synthesized_event>) at util/header.c:3695
      #4  0x0000000000443c79 in record__synthesize (tail=tail@entry=false, rec=0x97cc00 <record>) at builtin-record.c:1214
      #5  0x0000000000444ec9 in __cmd_record (rec=0x97cc00 <record>, argv=<optimized out>, argc=0) at builtin-record.c:1435
      #6  cmd_record (argc=0, argv=<optimized out>) at builtin-record.c:2450
      #7  0x00000000004ae3e9 in run_builtin (p=p@entry=0x98e058 <commands+216>, argc=argc@entry=3, argv=0x7fffffffd670) at perf.c:304
      #8  0x000000000042eded in handle_internal_command (argv=<optimized out>, argc=<optimized out>) at perf.c:356
      #9  run_argv (argcp=<optimized out>, argv=<optimized out>) at perf.c:400
      #10 main (argc=3, argv=<optimized out>) at perf.c:522
      (gdb)
    
    After the patch the SEGSEGV is gone.
    Reported-by: default avatarDavid Carrillo Cisneros <davidca@fb.com>
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: kernel-team@fb.com
    Cc: stable@vger.kernel.org # v5.1+
    Fixes: 606f972b ("perf bpf: Save bpf_prog_info information as headers to perf.data")
    Link: http://lkml.kernel.org/r/20190620010453.4118689-1-songliubraving@fb.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5f2bad57
header.c 87.5 KB