Files
linux/tools/perf/util
Adrian Hunter 70df07838f perf header: Fix segfault on build_mem_topology() error path
Do not increase the node count unless a node has been successfully read,
because it can lead to a segfault if an error occurs.

For example, if perf exceeds the open file limit in memory_node__read(),
which, on a test system, could be made to happen by setting the file limit
to exactly 32:

 Before:

  $ ulimit -n 32
  $ perf mem record --all-user -- sleep 1
  [ perf record: Woken up 1 times to write data ]
  failed: can't open memory sysfs data
  perf: Segmentation fault
  Obtained 14 stack frames.
  perf(sighandler_dump_stack+0x48) [0x55f4b1f59558]
  /lib/x86_64-linux-gnu/libc.so.6(+0x42520) [0x7f4ba1c42520]
  /lib/x86_64-linux-gnu/libc.so.6(free+0x1e) [0x7f4ba1ca53fe]
  perf(+0x178ff4) [0x55f4b1f48ff4]
  perf(+0x179a70) [0x55f4b1f49a70]
  perf(+0x17ef5d) [0x55f4b1f4ef5d]
  perf(+0x85c0b) [0x55f4b1e55c0b]
  perf(cmd_record+0xe1d) [0x55f4b1e5920d]
  perf(cmd_mem+0xc96) [0x55f4b1e80e56]
  perf(+0x130460) [0x55f4b1f00460]
  perf(main+0x689) [0x55f4b1e427d9]
  /lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7f4ba1c29d90]
  /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x7f4ba1c29e40]
  perf(_start+0x25) [0x55f4b1e42a25]
  Segmentation fault (core dumped)
  $

After:

  $ ulimit -n 32
  $ perf mem record --all-user -- sleep 1
  [ perf record: Woken up 1 times to write data ]
  failed: can't open memory sysfs data
  [ perf record: Captured and wrote 0.005 MB perf.data (11 samples) ]
  $

Fixes: f8e502b9d1 ("perf header: Ensure bitmaps are freed")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Ian Rogers <irogers@google.com>
Cc: German Gomez <german.gomez@arm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20231123075848.9652-2-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2023-11-27 15:38:45 -03:00
..
2022-01-12 17:01:38 -08:00
2023-10-25 13:38:33 -07:00
2023-09-12 17:50:36 -03:00
2022-06-28 12:05:25 -03:00
2023-03-14 08:29:46 -03:00
2022-10-04 08:55:21 -03:00
2023-05-27 09:38:25 -03:00
2023-05-27 09:38:25 -03:00
2023-11-27 10:21:27 -03:00
2021-04-29 10:30:58 -03:00
2021-08-11 09:35:44 -03:00
2023-11-09 13:49:32 -03:00
2023-11-09 13:47:50 -03:00
2023-11-09 13:47:50 -03:00
2023-01-23 10:00:47 -03:00
2023-03-20 19:28:21 -03:00
2021-02-03 13:10:44 -03:00
2023-10-12 10:01:56 -07:00
2023-06-23 21:47:20 -07:00
2023-06-23 21:47:20 -07:00
2023-06-12 15:57:54 -03:00
2023-04-06 21:40:28 -03:00
2023-09-12 17:47:00 -03:00
2023-10-17 12:40:50 -07:00
2022-12-14 15:28:18 -03:00
2023-11-09 13:47:50 -03:00
2023-03-20 19:28:21 -03:00
2020-10-14 13:34:26 -03:00
2023-10-12 10:01:56 -07:00
2022-06-23 11:54:22 -03:00
2022-10-04 08:55:20 -03:00
2023-04-10 19:20:53 -03:00
2023-04-10 19:21:31 -03:00