perf data: Fix error return code in perf_data__create_dir()
Sasha Levin
maintainerPATCH 1/2 perf data: Fix error return code in perf_data__create_dir()
From: Zhen Lei <[email protected]>
[ Upstream commit f2211881e737cade55e0ee07cf6a26d91a35a6fe ]
Although 'ret' has been initialized to -1, but it will be reassigned by the "ret = open(...)" statement in the for loop. So that, the value of 'ret' is unknown when asprintf() failed.
--- tools/perf/util/data.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
tools/perf/util/data.c +3 -2
@@ -35,7 +35,7 @@ void perf_data__close_dir(struct perf_data *data)int perf_data__create_dir (struct perf_data *data,int nr) {struct perf_data_file *files =NULL ; -int i, ret =-1 ; +int i, ret;if (WARN_ON (!data->is_dir))return -EINVAL ;
@@ -51,7 +51,8 @@ int perf_data__create_dir(struct perf_data *data, int nr)for (i =0 ; i < nr; i++) {struct perf_data_file *file = &files[i]; -if (asprintf (&file->path,"%s/data.%d" , data->path, i) <0 ) + ret =asprintf (&file->path,"%s/data.%d" , data->path, i); +if (ret <0 ) goto out_err; ret =open (file->path,O_RDWR |O_CREAT |O_TRUNC ,S_IRUSR |S_IWUSR );
Signature · 1 line
2.30.2
Sasha Levin
maintainerPATCH 2/2 perf ftrace: Fix access to pid in array when setting a pid filter
From: Thomas Richter <[email protected]>
[ Upstream commit 671b60cb6a897a5b3832fe57657152f2c3995e25 ]
Command 'perf ftrace -v -- ls' fails in s390 (at least 5.12.0rc6).
The root cause is a missing pointer dereference which causes an array element address to be used as PID.
Fix this by extracting the PID.
Output before:
# ./perf ftrace -v -- ls function_graph tracer is used write '-263732416' to tracing/set_ftrace_pid failed: Invalid argument failed to set ftrace pid #
Output after:
./perf ftrace -v -- ls
function_graph tracer is used
# tracer: function_graph
#
# CPU DURATION FUNCTION CALLS
# | | | | | | |
4) | rcu_read_lock_sched_held() {
4) 0.552 us | rcu_lockdep_current_cpu_online();
4) 6.124 us | }--- tools/perf/builtin-ftrace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/builtin-ftrace.c +1 -1
@@ -161,7 +161,7 @@ static int set_tracing_pid(struct perf_ftrace *ftrace)for (i =0 ; i <perf_thread_map__nr (ftrace->evlist->core.threads); i++) {scnprintf (buf,sizeof (buf),"%d" , - ftrace->evlist->core.threads->map[i]); +perf_thread_map__pid (ftrace->evlist->core.threads, i));if (append_tracing_file ("set_ftrace_pid" , buf) <0 )return -1 ; }
Signature · 1 line
2.30.2