perf tools: Fix find_perf_probe_point_from_map() which incorrectly returns success
authorWang Nan <wangnan0@huawei.com>
Thu, 5 Nov 2015 13:19:25 +0000 (13:19 +0000)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 5 Nov 2015 15:47:52 +0000 (12:47 -0300)
It is possible that find_perf_probe_point_from_map() fails to find a
symbol but still returns 0 because of an small error when coding:
find_perf_probe_point_from_map() set 'ret' to error code at first, but
also use it to hold return value of kernel_get_symbol_address_by_name().

This patch resets 'ret' to error even kernel_get_symbol_address_by_name()
success, so if !sym, the whole function returns error correctly.

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1446729565-27592-3-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/probe-event.c

index b51a8bfb40f92cd861d0954ed84e71e15ee50784..e659c4faddec3c13f79cdf7eab1ed973f9934ce0 100644 (file)
@@ -1905,6 +1905,9 @@ static int find_perf_probe_point_from_map(struct probe_trace_point *tp,
                        sym = __find_kernel_function(addr, &map);
                }
        }
+
+       /* ret may has be overwritten so reset it */
+       ret = -ENOENT;
        if (!sym)
                goto out;