• Arnaldo Carvalho de Melo's avatar
    Revert "perf record: Reduce memory for recording PERF_RECORD_LOST_SAMPLES event" · 5b3cde19
    Arnaldo Carvalho de Melo authored
    This reverts commit 7d1405c7.
    
    This causes segfaults in some cases, as reported by Milian:
    
      ```
      sudo /usr/bin/perf record -z --call-graph dwarf -e cycles -e
      raw_syscalls:sys_enter ls
      ...
      [ perf record: Woken up 3 times to write data ]
      malloc(): invalid next size (unsorted)
      Aborted
      ```
    
      Backtrace with GDB + debuginfod:
    
      ```
      malloc(): invalid next size (unsorted)
    
      Thread 1 "perf" received signal SIGABRT, Aborted.
      __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6,
      no_tid=no_tid@entry=0) at pthread_kill.c:44
      Downloading source file /usr/src/debug/glibc/glibc/nptl/pthread_kill.c
      44            return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO
      (ret) : 0;
      (gdb) bt
      #0  __pthread_kill_implementation (threadid=<optimized out>,
      signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
      #1  0x00007ffff6ea8eb3 in __pthread_kill_internal (threadid=<optimized out>,
      signo=6) at pthread_kill.c:78
      #2  0x00007ffff6e50a30 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/
      raise.c:26
      #3  0x00007ffff6e384c3 in __GI_abort () at abort.c:79
      #4  0x00007ffff6e39354 in __libc_message_impl (fmt=fmt@entry=0x7ffff6fc22ea
      "%s\n") at ../sysdeps/posix/libc_fatal.c:132
      #5  0x00007ffff6eb3085 in malloc_printerr (str=str@entry=0x7ffff6fc5850
      "malloc(): invalid next size (unsorted)") at malloc.c:5772
      #6  0x00007ffff6eb657c in _int_malloc (av=av@entry=0x7ffff6ff6ac0
      <main_arena>, bytes=bytes@entry=368) at malloc.c:4081
      #7  0x00007ffff6eb877e in __libc_calloc (n=<optimized out>,
      elem_size=<optimized out>) at malloc.c:3754
      #8  0x000055555569bdb6 in perf_session.do_write_header ()
      #9  0x00005555555a373a in __cmd_record.constprop.0 ()
      #10 0x00005555555a6846 in cmd_record ()
      #11 0x000055555564db7f in run_builtin ()
      #12 0x000055555558ed77 in main ()
      ```
    
      Valgrind memcheck:
      ```
      ==45136== Invalid write of size 8
      ==45136==    at 0x2B38A5: perf_event__synthesize_id_sample (in /usr/bin/perf)
      ==45136==    by 0x157069: __cmd_record.constprop.0 (in /usr/bin/perf)
      ==45136==    by 0x15A845: cmd_record (in /usr/bin/perf)
      ==45136==    by 0x201B7E: run_builtin (in /usr/bin/perf)
      ==45136==    by 0x142D76: main (in /usr/bin/perf)
      ==45136==  Address 0x6a866a8 is 0 bytes after a block of size 40 alloc'd
      ==45136==    at 0x4849BF3: calloc (vg_replace_malloc.c:1675)
      ==45136==    by 0x3574AB: zalloc (in /usr/bin/perf)
      ==45136==    by 0x1570E0: __cmd_record.constprop.0 (in /usr/bin/perf)
      ==45136==    by 0x15A845: cmd_record (in /usr/bin/perf)
      ==45136==    by 0x201B7E: run_builtin (in /usr/bin/perf)
      ==45136==    by 0x142D76: main (in /usr/bin/perf)
      ==45136==
      ==45136== Syscall param write(buf) points to unaddressable byte(s)
      ==45136==    at 0x575953D: __libc_write (write.c:26)
      ==45136==    by 0x575953D: write (write.c:24)
      ==45136==    by 0x35761F: ion (in /usr/bin/perf)
      ==45136==    by 0x357778: writen (in /usr/bin/perf)
      ==45136==    by 0x1548F7: record__write (in /usr/bin/perf)
      ==45136==    by 0x15708A: __cmd_record.constprop.0 (in /usr/bin/perf)
      ==45136==    by 0x15A845: cmd_record (in /usr/bin/perf)
      ==45136==    by 0x201B7E: run_builtin (in /usr/bin/perf)
      ==45136==    by 0x142D76: main (in /usr/bin/perf)
      ==45136==  Address 0x6a866a8 is 0 bytes after a block of size 40 alloc'd
      ==45136==    at 0x4849BF3: calloc (vg_replace_malloc.c:1675)
      ==45136==    by 0x3574AB: zalloc (in /usr/bin/perf)
      ==45136==    by 0x1570E0: __cmd_record.constprop.0 (in /usr/bin/perf)
      ==45136==    by 0x15A845: cmd_record (in /usr/bin/perf)
      ==45136==    by 0x201B7E: run_builtin (in /usr/bin/perf)
      ==45136==    by 0x142D76: main (in /usr/bin/perf)
      ==45136==
     -----
    
    Closes: https://lore.kernel.org/linux-perf-users/23879991.0LEYPuXRzz@milian-workstation/Reported-by: default avatarMilian Wolff <milian.wolff@kdab.com>
    Tested-by: default avatarMilian Wolff <milian.wolff@kdab.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: stable@kernel.org # 6.8+
    Link: https://lore.kernel.org/lkml/Zl9ksOlHJHnKM70p@x1Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    5b3cde19
builtin-record.c 112 KB