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