diff options
| author | Tom Zanussi <tom.zanussi@linux.intel.com> | 2010-11-10 08:52:32 -0500 |
|---|---|---|
| committer | Tom Zanussi <tom.zanussi@linux.intel.com> | 2010-11-10 08:52:32 -0500 |
| commit | e8719adf30c136319a77824d032b3a185148f8f9 (patch) | |
| tree | 55773bb481e65568be3093aaf205303d3f01592d | |
| parent | 01797c599816d39dfea47864c0f90cd50845811f (diff) | |
perf trace scripting: fix some small memory leaks and missing error checks
Free the other two fields of script_desc which somehow got overlooked,
free malloc'ed args in case exec fails, and add missing checks for
failed mallocs.
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Acked-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
| -rw-r--r-- | tools/perf/builtin-trace.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 2f8df45c4dcb..368e6249290a 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
| @@ -337,6 +337,8 @@ static struct script_desc *script_desc__new(const char *name) | |||
| 337 | static void script_desc__delete(struct script_desc *s) | 337 | static void script_desc__delete(struct script_desc *s) |
| 338 | { | 338 | { |
| 339 | free(s->name); | 339 | free(s->name); |
| 340 | free(s->half_liner); | ||
| 341 | free(s->args); | ||
| 340 | free(s); | 342 | free(s); |
| 341 | } | 343 | } |
| 342 | 344 | ||
| @@ -626,6 +628,9 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used) | |||
| 626 | close(live_pipe[0]); | 628 | close(live_pipe[0]); |
| 627 | 629 | ||
| 628 | __argv = malloc(6 * sizeof(const char *)); | 630 | __argv = malloc(6 * sizeof(const char *)); |
| 631 | if (!__argv) | ||
| 632 | die("malloc"); | ||
| 633 | |||
| 629 | __argv[0] = "/bin/sh"; | 634 | __argv[0] = "/bin/sh"; |
| 630 | __argv[1] = record_script_path; | 635 | __argv[1] = record_script_path; |
| 631 | __argv[2] = "-q"; | 636 | __argv[2] = "-q"; |
| @@ -634,6 +639,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used) | |||
| 634 | __argv[5] = NULL; | 639 | __argv[5] = NULL; |
| 635 | 640 | ||
| 636 | execvp("/bin/sh", (char **)__argv); | 641 | execvp("/bin/sh", (char **)__argv); |
| 642 | free(__argv); | ||
| 637 | exit(-1); | 643 | exit(-1); |
| 638 | } | 644 | } |
| 639 | 645 | ||
| @@ -641,6 +647,8 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used) | |||
| 641 | close(live_pipe[1]); | 647 | close(live_pipe[1]); |
| 642 | 648 | ||
| 643 | __argv = malloc((argc + 3) * sizeof(const char *)); | 649 | __argv = malloc((argc + 3) * sizeof(const char *)); |
| 650 | if (!__argv) | ||
| 651 | die("malloc"); | ||
| 644 | __argv[0] = "/bin/sh"; | 652 | __argv[0] = "/bin/sh"; |
| 645 | __argv[1] = report_script_path; | 653 | __argv[1] = report_script_path; |
| 646 | for (i = 2; i < argc; i++) | 654 | for (i = 2; i < argc; i++) |
| @@ -650,6 +658,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used) | |||
| 650 | __argv[i++] = NULL; | 658 | __argv[i++] = NULL; |
| 651 | 659 | ||
| 652 | execvp("/bin/sh", (char **)__argv); | 660 | execvp("/bin/sh", (char **)__argv); |
| 661 | free(__argv); | ||
| 653 | exit(-1); | 662 | exit(-1); |
| 654 | } | 663 | } |
| 655 | 664 | ||
| @@ -661,6 +670,8 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used) | |||
| 661 | } | 670 | } |
| 662 | 671 | ||
| 663 | __argv = malloc((argc + 1) * sizeof(const char *)); | 672 | __argv = malloc((argc + 1) * sizeof(const char *)); |
| 673 | if (!__argv) | ||
| 674 | die("malloc"); | ||
| 664 | __argv[0] = "/bin/sh"; | 675 | __argv[0] = "/bin/sh"; |
| 665 | __argv[1] = script_path; | 676 | __argv[1] = script_path; |
| 666 | for (i = 3; i < argc; i++) | 677 | for (i = 3; i < argc; i++) |
| @@ -668,6 +679,7 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used) | |||
| 668 | __argv[argc - 1] = NULL; | 679 | __argv[argc - 1] = NULL; |
| 669 | 680 | ||
| 670 | execvp("/bin/sh", (char **)__argv); | 681 | execvp("/bin/sh", (char **)__argv); |
| 682 | free(__argv); | ||
| 671 | exit(-1); | 683 | exit(-1); |
| 672 | } | 684 | } |
| 673 | 685 | ||
