From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756345AbbJAHOa (ORCPT ); Thu, 1 Oct 2015 03:14:30 -0400 Received: from terminus.zytor.com ([198.137.202.10]:44483 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754434AbbJAHO0 (ORCPT ); Thu, 1 Oct 2015 03:14:26 -0400 Date: Thu, 1 Oct 2015 00:14:04 -0700 From: tip-bot for Masami Hiramatsu Message-ID: Cc: namhyung@kernel.org, hpa@zytor.com, masami.hiramatsu.pt@hitachi.com, jolsa@kernel.org, linux-kernel@vger.kernel.org, acme@redhat.com, tglx@linutronix.de, wangnan0@huawei.com, mingo@kernel.org Reply-To: acme@redhat.com, namhyung@kernel.org, hpa@zytor.com, jolsa@kernel.org, masami.hiramatsu.pt@hitachi.com, linux-kernel@vger.kernel.org, wangnan0@huawei.com, tglx@linutronix.de, mingo@kernel.org In-Reply-To: <20150930164135.3733.23993.stgit@localhost.localdomain> References: <20150930164135.3733.23993.stgit@localhost.localdomain> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf probe: Fix a segfault bug in debuginfo_cache Git-Commit-ID: 20f49859c785183d5296670a10dace454131274b X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 20f49859c785183d5296670a10dace454131274b Gitweb: http://git.kernel.org/tip/20f49859c785183d5296670a10dace454131274b Author: Masami Hiramatsu AuthorDate: Thu, 1 Oct 2015 01:41:35 +0900 Committer: Arnaldo Carvalho de Melo CommitDate: Wed, 30 Sep 2015 18:34:36 -0300 perf probe: Fix a segfault bug in debuginfo_cache perf probe --list will get a segfault if the first kprobe event is on a module and the second or latter one is on the kernel. e.g. ---- # ./perf probe -q -m pcspkr pcspkr_event # ./perf probe -q vfs_read # ./perf probe -l Segmentation fault (core dumped) ---- This is because the debuginfo_cache fails to handle NULL module name, which causes segfault on strcmp. (Note that strcmp("something", NULL) always causes segfault) To fix this debuginfo_cache__open always translates the NULL module name to "kernel" (this is correct, because NULL module name means opening the debuginfo for the kernel) ---- # ./perf probe -l probe:pcspkr_event (on pcspkr_event@drivers/input/misc/pcspkr.c in pcspkr) probe:vfs_read (on vfs_read@ksrc/linux-3/fs/read_write.c) ---- Signed-off-by: Masami Hiramatsu Tested-by: Arnaldo Carvalho de Melo Cc: Jiri Olsa Cc: Namhyung Kim Cc: Wang Nan Link: http://lkml.kernel.org/r/20150930164135.3733.23993.stgit@localhost.localdomain Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/probe-event.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 65be284..3010abc 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -441,19 +441,22 @@ static char *debuginfo_cache_path; static struct debuginfo *debuginfo_cache__open(const char *module, bool silent) { - if ((debuginfo_cache_path && !strcmp(debuginfo_cache_path, module)) || - (!debuginfo_cache_path && !module && debuginfo_cache)) + const char *path = module; + + /* If the module is NULL, it should be the kernel. */ + if (!module) + path = "kernel"; + + if (debuginfo_cache_path && !strcmp(debuginfo_cache_path, path)) goto out; /* Copy module path */ free(debuginfo_cache_path); - if (module) { - debuginfo_cache_path = strdup(module); - if (!debuginfo_cache_path) { - debuginfo__delete(debuginfo_cache); - debuginfo_cache = NULL; - goto out; - } + debuginfo_cache_path = strdup(path); + if (!debuginfo_cache_path) { + debuginfo__delete(debuginfo_cache); + debuginfo_cache = NULL; + goto out; } debuginfo_cache = open_debuginfo(module, silent);