perf kmem: Fix segfault when invalid sort key is given
When it tries to free 'str', it was already updated by strsep() - so it needs to save the original pointer. # perf kmem stat -s xxx,hit Error: Unknown --sort key: 'xxx' *** Error in `perf': free(): invalid pointer: 0x0000000000e9e7b6 *** ======= Backtrace: ========= /usr/lib/libc.so.6(+0x7198e)[0x7fc7e6e0d98e] /usr/lib/libc.so.6(+0x76dee)[0x7fc7e6e12dee] /usr/lib/libc.so.6(+0x775cb)[0x7fc7e6e135cb] ./perf[0x44a1b5] ./perf[0x490b20] ./perf(parse_options_step+0x173)[0x491773] ./perf(parse_options_subcommand+0xa7)[0x491fb7] ./perf(cmd_kmem+0x2bc)[0x44ae4c] ./perf[0x47aa13] ./perf(main+0x60a)[0x427a9a] /usr/lib/libc.so.6(__libc_start_main+0xf0)[0x7fc7e6dbc800] ./perf(_start+0x29)[0x427bb9] Signed-off-by: Namhyung Kim <namhyung@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Joonsoo Kim <js1304@gmail.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1426145571-3065-2-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
7910352852
Коммит
405f87557d
|
@ -559,6 +559,7 @@ static int setup_sorting(struct list_head *sort_list, const char *arg)
|
|||
{
|
||||
char *tok;
|
||||
char *str = strdup(arg);
|
||||
char *pos = str;
|
||||
|
||||
if (!str) {
|
||||
pr_err("%s: strdup failed\n", __func__);
|
||||
|
@ -566,7 +567,7 @@ static int setup_sorting(struct list_head *sort_list, const char *arg)
|
|||
}
|
||||
|
||||
while (true) {
|
||||
tok = strsep(&str, ",");
|
||||
tok = strsep(&pos, ",");
|
||||
if (!tok)
|
||||
break;
|
||||
if (sort_dimension__add(tok, sort_list) < 0) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче