[Bug 1835940] [NEW] perf core dump at tool/perf/util/namespaces.c:144

Qin Li 1835940 at bugs.launchpad.net
Tue Jul 9 18:33:36 UTC 2019


Public bug reported:

Running the following perf collect inside a running docker could
potentially crash:

$ perf record -F 100 -ag -o /tmp/perf-100Hz-10s -- sleep 10

The dump is caused by SIGSEGV for de-referencing nullptr in
nsinfo__copy() in at namespaces.c:144

$ lldb -c /tmp/cores/perf.core.07092019
(lldb) target create --core "/tmp/cores/perf.core.07092019"
Core file '/tmp/cores/perf.core.07092019' (x86_64) was loaded.
(lldb) bt
* thread #1, name = 'perf', stop reason = signal SIGSEGV
  * frame #0: 0x0000558f2dda2014 perf`nsinfo__copy(nsi=0x0000000000000000) at namespaces.c:144
    frame #1: 0x0000558f2dd98779 perf`map__new(machine=0x0000558f31213c48, start=140723782385664, len=8192, pgoff=0, d_maj=<unavailable>, d_min=<unavailable>, ino=0, ino_gen=0, prot=5, flags=4098, filename="", type=MAP__FUNCTION, thread=0x0000558f316f94c0) at map.c:192
    frame #2: 0x0000558f2dd96a39 perf`machine__process_mmap2_event(machine=0x0000558f31213c48, event=0x00007fdd8f1105f0, sample=<unavailable>) at machine.c:1428
    frame #3: 0x0000558f2dd9d7bc perf`ordered_events__deliver_event at session.c:1343
    frame #4: 0x0000558f2dd9d798 perf`ordered_events__deliver_event
    frame #5: 0x0000558f2dd9d790 perf`ordered_events__deliver_event(oe=0x0000558f31219e00, event=<unavailable>) at session.c:120
    frame #6: 0x0000558f2dda1073 perf`ordered_events__flush at ordered-events.c:211
    frame #7: 0x0000558f2dda0fb6 perf`ordered_events__flush(oe=0x0000558f31219e00, how=OE_FLUSH__ROUND) at ordered-events.c:278
    frame #8: 0x0000558f2dd9e854 perf`perf_session__process_event at session.c:1383
    frame #9: 0x0000558f2dd9e570 perf`perf_session__process_event(session=0x0000558f31213b60, event=0x00007fdd8f148050, file_offset=565328) at session.c:1511
    frame #10: 0x0000558f2dd9ff40 perf`perf_session__process_events at session.c:1903
    frame #11: 0x0000558f2dd9fec0 perf`perf_session__process_events(session=0x0000558f31213b60) at session.c:1957
    frame #12: 0x0000558f2dcd76bc perf`cmd_record at builtin-record.c:442
    frame #13: 0x0000558f2dcd7695 perf`cmd_record at builtin-record.c:574
    frame #14: 0x0000558f2dcd7695 perf`cmd_record at builtin-record.c:1115
    frame #15: 0x0000558f2dcd7601 perf`cmd_record(argc=<unavailable>, argv=<unavailable>) at builtin-record.c:1809
    frame #16: 0x0000558f2dd3da01 perf`run_builtin(p=0x0000558f2e1f12b8, argc=9, argv=0x00007ffc21201e30) at perf.c:297
    frame #17: 0x0000558f2dd3dcfe perf`handle_internal_command(argc=9, argv=0x00007ffc21201e30) at perf.c:349
    frame #18: 0x0000558f2dcc17b9 perf`main [inlined] run_argv(argcp=<unavailable>, argv=<unavailable>) at perf.c:393
    frame #19: 0x0000558f2dcc17ae perf`main(argc=<unavailable>, argv=0x00007ffc21201e30) at perf.c:537
    frame #20: 0x00007fdd8fad5b97 libc.so.6`__libc_start_main + 231
    frame #21: 0x0000558f2dcc1c3a perf`_start + 42

The fix for this has already been merged to Linux 4.19-rc, since
8/10/2018, see the original lkml post
https://lore.kernel.org/lkml/20180810133614.9925-1-bevers@mesosphere.com/.

bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 137) struct nsinfo *nsinfo__copy(struct nsinfo *nsi)
bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 138) {
bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 139)  struct nsinfo *nnsi;
bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 140) 
3f4417d693b43 (Benno Evers              2018-08-10 15:36:13 +0200 141)  if (nsi == NULL)
3f4417d693b43 (Benno Evers              2018-08-10 15:36:13 +0200 142)          return NULL;
3f4417d693b43 (Benno Evers              2018-08-10 15:36:13 +0200 143) 
bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 144)  nnsi = calloc(1, sizeof(*nnsi));

I verified locally that this fix works by manually applying to 4.15 and
rebuild perf executable after that.

To port the fix to 4.15, or other versions earlier than 4.19-rc, we could run:
$ git cherry-pick 3f4417d693b43

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: New

** Attachment added: "perf.core.07092019.gz"
   https://bugs.launchpad.net/bugs/1835940/+attachment/5275915/+files/perf.core.07092019.gz

** Package changed: systemd (Ubuntu) => linux (Ubuntu)

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/1835940

Title:
  perf core dump at tool/perf/util/namespaces.c:144

Status in linux package in Ubuntu:
  New

Bug description:
  Running the following perf collect inside a running docker could
  potentially crash:

  $ perf record -F 100 -ag -o /tmp/perf-100Hz-10s -- sleep 10

  The dump is caused by SIGSEGV for de-referencing nullptr in
  nsinfo__copy() in at namespaces.c:144

  $ lldb -c /tmp/cores/perf.core.07092019
  (lldb) target create --core "/tmp/cores/perf.core.07092019"
  Core file '/tmp/cores/perf.core.07092019' (x86_64) was loaded.
  (lldb) bt
  * thread #1, name = 'perf', stop reason = signal SIGSEGV
    * frame #0: 0x0000558f2dda2014 perf`nsinfo__copy(nsi=0x0000000000000000) at namespaces.c:144
      frame #1: 0x0000558f2dd98779 perf`map__new(machine=0x0000558f31213c48, start=140723782385664, len=8192, pgoff=0, d_maj=<unavailable>, d_min=<unavailable>, ino=0, ino_gen=0, prot=5, flags=4098, filename="", type=MAP__FUNCTION, thread=0x0000558f316f94c0) at map.c:192
      frame #2: 0x0000558f2dd96a39 perf`machine__process_mmap2_event(machine=0x0000558f31213c48, event=0x00007fdd8f1105f0, sample=<unavailable>) at machine.c:1428
      frame #3: 0x0000558f2dd9d7bc perf`ordered_events__deliver_event at session.c:1343
      frame #4: 0x0000558f2dd9d798 perf`ordered_events__deliver_event
      frame #5: 0x0000558f2dd9d790 perf`ordered_events__deliver_event(oe=0x0000558f31219e00, event=<unavailable>) at session.c:120
      frame #6: 0x0000558f2dda1073 perf`ordered_events__flush at ordered-events.c:211
      frame #7: 0x0000558f2dda0fb6 perf`ordered_events__flush(oe=0x0000558f31219e00, how=OE_FLUSH__ROUND) at ordered-events.c:278
      frame #8: 0x0000558f2dd9e854 perf`perf_session__process_event at session.c:1383
      frame #9: 0x0000558f2dd9e570 perf`perf_session__process_event(session=0x0000558f31213b60, event=0x00007fdd8f148050, file_offset=565328) at session.c:1511
      frame #10: 0x0000558f2dd9ff40 perf`perf_session__process_events at session.c:1903
      frame #11: 0x0000558f2dd9fec0 perf`perf_session__process_events(session=0x0000558f31213b60) at session.c:1957
      frame #12: 0x0000558f2dcd76bc perf`cmd_record at builtin-record.c:442
      frame #13: 0x0000558f2dcd7695 perf`cmd_record at builtin-record.c:574
      frame #14: 0x0000558f2dcd7695 perf`cmd_record at builtin-record.c:1115
      frame #15: 0x0000558f2dcd7601 perf`cmd_record(argc=<unavailable>, argv=<unavailable>) at builtin-record.c:1809
      frame #16: 0x0000558f2dd3da01 perf`run_builtin(p=0x0000558f2e1f12b8, argc=9, argv=0x00007ffc21201e30) at perf.c:297
      frame #17: 0x0000558f2dd3dcfe perf`handle_internal_command(argc=9, argv=0x00007ffc21201e30) at perf.c:349
      frame #18: 0x0000558f2dcc17b9 perf`main [inlined] run_argv(argcp=<unavailable>, argv=<unavailable>) at perf.c:393
      frame #19: 0x0000558f2dcc17ae perf`main(argc=<unavailable>, argv=0x00007ffc21201e30) at perf.c:537
      frame #20: 0x00007fdd8fad5b97 libc.so.6`__libc_start_main + 231
      frame #21: 0x0000558f2dcc1c3a perf`_start + 42

  The fix for this has already been merged to Linux 4.19-rc, since
  8/10/2018, see the original lkml post
  https://lore.kernel.org/lkml/20180810133614.9925-1-bevers@mesosphere.com/.

  bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 137) struct nsinfo *nsinfo__copy(struct nsinfo *nsi)
  bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 138) {
  bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 139)  struct nsinfo *nnsi;
  bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 140) 
  3f4417d693b43 (Benno Evers              2018-08-10 15:36:13 +0200 141)  if (nsi == NULL)
  3f4417d693b43 (Benno Evers              2018-08-10 15:36:13 +0200 142)          return NULL;
  3f4417d693b43 (Benno Evers              2018-08-10 15:36:13 +0200 143) 
  bf2e710b3cb84 (Krister Johansen         2017-07-05 18:48:09 -0700 144)  nnsi = calloc(1, sizeof(*nnsi));

  I verified locally that this fix works by manually applying to 4.15
  and rebuild perf executable after that.

  To port the fix to 4.15, or other versions earlier than 4.19-rc, we could run:
  $ git cherry-pick 3f4417d693b43

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1835940/+subscriptions



More information about the foundations-bugs mailing list