From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752407AbcBAI45 (ORCPT ); Mon, 1 Feb 2016 03:56:57 -0500 Received: from mga04.intel.com ([192.55.52.120]:13549 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751290AbcBAI44 (ORCPT ); Mon, 1 Feb 2016 03:56:56 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,379,1449561600"; d="scan'208";a="893628069" Subject: Re: [PATCH 2/2] perf tools: Fix fault in tracepoint_error if NULL is passed to parse_event To: Wang Nan , acme@kernel.org References: <1454296865-19749-1-git-send-email-wangnan0@huawei.com> <1454296865-19749-2-git-send-email-wangnan0@huawei.com> Cc: linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , Tong Zhang , Josh Poimboeuf From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Message-ID: <56AF1D09.4050108@intel.com> Date: Mon, 1 Feb 2016 10:53:29 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1454296865-19749-2-git-send-email-wangnan0@huawei.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/02/16 05:21, Wang Nan wrote: > Following segfault can happen with a non-root user: > > $ ./perf record -I -e intel_pt/tsc=1,noretcomp=1/u /bin/ls > WARNING: Kernel address maps (/proc/{kallsyms,modules}) are restricted, > check /proc/sys/kernel/kptr_restrict. > > Samples in kernel functions may not be resolved if a suitable vmlinux > file is not found in the buildid cache or in the vmlinux path. > > Samples in kernel modules won't be resolved at all. > > If some relocation was applied (e.g. kexec) symbols may be misresolved > even with a suitable vmlinux or kallsyms file. > > Segmentation fault (core dumped) > > The error is in tracepoint_error: it assumes 'e' is valid. > > However, there are many situation a parse_event can be called without > parse_events_error. See result of > 'grep 'parse_events(.*NULL)' ./tools/perf/ -r'. > > This patch makes tracepoint_error() directly return when !e. I sent the same fix here: http://marc.info/?l=linux-kernel&m=145381056111871 > > Signed-off-by: Wang Nan > Cc: Adrian Hunter > Cc: Arnaldo Carvalho de Melo > Cc: Tong Zhang > Cc: Josh Poimboeuf > --- > tools/perf/util/parse-events.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index 4f7b0ef..813d9b2 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -399,6 +399,9 @@ static void tracepoint_error(struct parse_events_error *e, int err, > { > char help[BUFSIZ]; > > + if (!e) > + return; > + > /* > * We get error directly from syscall errno ( > 0), > * or from encoded pointer's error ( < 0). >