History

Merge tag 'perf-tools-fixes-for-v5.12-2021-04-25' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux

Pull perf tools fixes from Arnaldo Carvalho de Melo: - Fix potential NULL pointer dereference in the auxtrace option parser - Fix access to PID in an array when setting a PID filter in 'perf ftrace' - Fix error return code in the 'perf data' tool and in maps__clone(), found using a static analysis tool from Huawei * tag 'perf-tools-fixes-for-v5.12-2021-04-25' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: perf map: Fix error return code in maps__clone() perf ftrace: Fix access to pid in array when setting a pid filter perf auxtrace: Fix potential NULL pointer dereference perf data: Fix error return code in perf_data__create_dir()

Linus Torvalds committed 5 years ago

Commit d2d09fb2 parents 24dfc39 c6f87144 files · +10 −6Browse files

Unified · Split

4 files
  1. tools/perf/builtin-ftrace.c +1 −1
  2. tools/perf/util/auxtrace.c +1 −1
  3. tools/perf/util/data.c +3 −2
  4. tools/perf/util/map.c +5 −2
tools/perf/builtin-ftrace.c+1−1
@@ -289,7 +289,7 @@ static int set_tracing_pid(struct perf_ftrace *ftrace) · 288 unmodified lines
289 289
290 for (i = 0; i < perf_thread_map__nr(ftrace->evlist->core.threads); i++) {290 for (i = 0; i < perf_thread_map__nr(ftrace->evlist->core.threads); i++) {
291 scnprintf(buf, sizeof(buf), "%d",291 scnprintf(buf, sizeof(buf), "%d",
292 ftrace->evlist->core.threads->map[i]);292 perf_thread_map__pid(ftrace->evlist->core.threads, i));
293 if (append_tracing_file("set_ftrace_pid", buf) < 0)293 if (append_tracing_file("set_ftrace_pid", buf) < 0)
294 return -1;294 return -1;
295 }295 }
tools/perf/util/auxtrace.c+1−1
@@ -634,7 +634,7 @@ int auxtrace_parse_snapshot_options(struct auxtrace_record *itr, · 633 unmodified lines
634 break;634 break;
635 }635 }
636 636
637 if (itr)637 if (itr && itr->parse_snapshot_options)
638 return itr->parse_snapshot_options(itr, opts, str);638 return itr->parse_snapshot_options(itr, opts, str);
639 639
640 pr_err("No AUX area tracing to snapshot\n");640 pr_err("No AUX area tracing to snapshot\n");
tools/perf/util/data.c+3−2
@@ -35,7 +35,7 @@ void perf_data__close_dir(struct perf_data *data) · 34 unmodified lines
35int perf_data__create_dir(struct perf_data *data, int nr)35int perf_data__create_dir(struct perf_data *data, int nr)
36{36{
37 struct perf_data_file *files = NULL;37 struct perf_data_file *files = NULL;
38 int i, ret = -1;38 int i, ret;
39 39
40 if (WARN_ON(!data->is_dir))40 if (WARN_ON(!data->is_dir))
41 return -EINVAL;41 return -EINVAL;
@@ -51,7 +51,8 @@ int perf_data__create_dir(struct perf_data *data, int nr) · 9 unmodified lines
51 for (i = 0; i < nr; i++) {51 for (i = 0; i < nr; i++) {
52 struct perf_data_file *file = &files[i];52 struct perf_data_file *file = &files[i];
53 53
54 if (asprintf(&file->path, "%s/data.%d", data->path, i) < 0)54 ret = asprintf(&file->path, "%s/data.%d", data->path, i);
55 if (ret < 0)
55 goto out_err;56 goto out_err;
56 57
57 ret = open(file->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);58 ret = open(file->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
tools/perf/util/map.c+5−2
@@ -840,15 +840,18 @@ out: · 839 unmodified lines
840int maps__clone(struct thread *thread, struct maps *parent)840int maps__clone(struct thread *thread, struct maps *parent)
841{841{
842 struct maps *maps = thread->maps;842 struct maps *maps = thread->maps;
843 int err = -ENOMEM;843 int err;
844 struct map *map;844 struct map *map;
845 845
846 down_read(&parent->lock);846 down_read(&parent->lock);
847 847
848 maps__for_each_entry(parent, map) {848 maps__for_each_entry(parent, map) {
849 struct map *new = map__clone(map);849 struct map *new = map__clone(map);
850 if (new == NULL)850
851 if (new == NULL) {
852 err = -ENOMEM;
851 goto out_unlock;853 goto out_unlock;
854 }
852 855
853 err = unwind__prepare_access(maps, new, NULL);856 err = unwind__prepare_access(maps, new, NULL);
854 if (err)857 if (err)