Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf daemon: Dynamically allocate path to perf

Avoid a PATH_MAX array in __daemon (the .data section) by dynamically
allocating the memory.

Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20230526183401.2326121-9-irogers@google.com
Cc: K Prateek Nayak <kprateek.nayak@amd.com>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Ross Zwisler <zwisler@chromium.org>
Cc: Steven Rostedt (Google) <rostedt@goodmis.org>
Cc: Sean Christopherson <seanjc@google.com>
Cc: Yang Jihong <yangjihong1@huawei.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org
Cc: linux-perf-users@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
92294b90 20dcad8f

+28 -16
+28 -16
tools/perf/builtin-daemon.c
··· 90 90 char *base; 91 91 struct list_head sessions; 92 92 FILE *out; 93 - char perf[PATH_MAX]; 93 + char *perf; 94 94 int signal_fd; 95 95 time_t start; 96 96 }; ··· 1490 1490 return send_cmd(daemon, &cmd); 1491 1491 } 1492 1492 1493 + static char *alloc_perf_exe_path(void) 1494 + { 1495 + char path[PATH_MAX]; 1496 + 1497 + perf_exe(path, sizeof(path)); 1498 + return strdup(path); 1499 + } 1500 + 1493 1501 int cmd_daemon(int argc, const char **argv) 1494 1502 { 1495 1503 struct option daemon_options[] = { ··· 1510 1502 "field separator", "print counts with custom separator", ","), 1511 1503 OPT_END() 1512 1504 }; 1505 + int ret = -1; 1513 1506 1514 - perf_exe(__daemon.perf, sizeof(__daemon.perf)); 1507 + __daemon.perf = alloc_perf_exe_path(); 1508 + if (!__daemon.perf) 1509 + return -ENOMEM; 1510 + 1515 1511 __daemon.out = stdout; 1516 1512 1517 1513 argc = parse_options(argc, argv, daemon_options, daemon_usage, ··· 1523 1511 1524 1512 if (argc) { 1525 1513 if (!strcmp(argv[0], "start")) 1526 - return __cmd_start(&__daemon, daemon_options, argc, argv); 1514 + ret = __cmd_start(&__daemon, daemon_options, argc, argv); 1527 1515 if (!strcmp(argv[0], "signal")) 1528 - return __cmd_signal(&__daemon, daemon_options, argc, argv); 1516 + ret = __cmd_signal(&__daemon, daemon_options, argc, argv); 1529 1517 else if (!strcmp(argv[0], "stop")) 1530 - return __cmd_stop(&__daemon, daemon_options, argc, argv); 1518 + ret = __cmd_stop(&__daemon, daemon_options, argc, argv); 1531 1519 else if (!strcmp(argv[0], "ping")) 1532 - return __cmd_ping(&__daemon, daemon_options, argc, argv); 1533 - 1534 - pr_err("failed: unknown command '%s'\n", argv[0]); 1535 - return -1; 1520 + ret = __cmd_ping(&__daemon, daemon_options, argc, argv); 1521 + else 1522 + pr_err("failed: unknown command '%s'\n", argv[0]); 1523 + } else { 1524 + ret = setup_config(&__daemon); 1525 + if (ret) 1526 + pr_err("failed: config not found\n"); 1527 + else 1528 + ret = send_cmd_list(&__daemon); 1536 1529 } 1537 - 1538 - if (setup_config(&__daemon)) { 1539 - pr_err("failed: config not found\n"); 1540 - return -1; 1541 - } 1542 - 1543 - return send_cmd_list(&__daemon); 1530 + zfree(&__daemon.perf); 1531 + return ret; 1544 1532 }