Skip to content

Commit

Permalink
perf tools: fix thread_map__new_by_pid_str() memory leak in error path
Browse files Browse the repository at this point in the history
The namelist array (including its content) was not freed if we fail to
realloc a new 'threads' structure.

Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Link: http://lkml.kernel.org/r/1337952109-31995-1-git-send-email-fbuihuu@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Franck Bui-Huu authored and Arnaldo Carvalho de Melo committed May 25, 2012
1 parent a83eb3e commit e8cdd94
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions tools/perf/util/thread_map.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,28 +188,27 @@ static struct thread_map *thread_map__new_by_pid_str(const char *pid_str)
nt = realloc(threads, (sizeof(*threads) +
sizeof(pid_t) * total_tasks));
if (nt == NULL)
goto out_free_threads;
goto out_free_namelist;

threads = nt;

if (threads) {
for (i = 0; i < items; i++)
threads->map[j++] = atoi(namelist[i]->d_name);
threads->nr = total_tasks;
}

for (i = 0; i < items; i++)
for (i = 0; i < items; i++) {
threads->map[j++] = atoi(namelist[i]->d_name);
free(namelist[i]);
}
threads->nr = total_tasks;
free(namelist);

if (!threads)
break;
}

out:
strlist__delete(slist);
return threads;

out_free_namelist:
for (i = 0; i < items; i++)
free(namelist[i]);
free(namelist);

out_free_threads:
free(threads);
threads = NULL;
Expand Down

0 comments on commit e8cdd94

Please sign in to comment.