From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752796AbcFBGd2 (ORCPT ); Thu, 2 Jun 2016 02:33:28 -0400 Received: from terminus.zytor.com ([198.137.202.10]:55830 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751232AbcFBGdH (ORCPT ); Thu, 2 Jun 2016 02:33:07 -0400 Date: Wed, 1 Jun 2016 23:32:53 -0700 From: tip-bot for Wang Nan Message-ID: Cc: linux-kernel@vger.kernel.org, lizefan@huawei.com, jolsa@kernel.org, acme@redhat.com, mhiramat@kernel.org, tglx@linutronix.de, namhyung@kernel.org, wangnan0@huawei.com, mingo@kernel.org, hpa@zytor.com, hekuang@huawei.com Reply-To: hekuang@huawei.com, hpa@zytor.com, mingo@kernel.org, namhyung@kernel.org, wangnan0@huawei.com, tglx@linutronix.de, mhiramat@kernel.org, acme@redhat.com, lizefan@huawei.com, jolsa@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <1464183898-174512-2-git-send-email-wangnan0@huawei.com> References: <1464183898-174512-2-git-send-email-wangnan0@huawei.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf evlist: Check 'base' pointer before checking refcnt when put a mmap Git-Commit-ID: e10e4ef63b54912feffb1dc48ff7d03d931b1647 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: e10e4ef63b54912feffb1dc48ff7d03d931b1647 Gitweb: http://git.kernel.org/tip/e10e4ef63b54912feffb1dc48ff7d03d931b1647 Author: Wang Nan AuthorDate: Wed, 25 May 2016 13:44:49 +0000 Committer: Arnaldo Carvalho de Melo CommitDate: Mon, 30 May 2016 12:41:45 -0300 perf evlist: Check 'base' pointer before checking refcnt when put a mmap evlist->mmap[i]->refcnt could be 0 if an evlist has no evsel or if all evsels don't match the evlist during mmap. For example, when all evsels are overwritable but the evlist itself is normal. To avoid crashing, perf should check 'base' pointer before checking refcnt, and raise bug only when base is not NULL. Signed-off-by: Wang Nan Cc: He Kuang Cc: Jiri Olsa Cc: Masami Hiramatsu Cc: Namhyung Kim Cc: Zefan Li Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1464183898-174512-2-git-send-email-wangnan0@huawei.com [ Renamed 'mmap' variable, it is reserved in old distros such as Ubuntu 12.04, breaking the build ] Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/evlist.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 50d7b80..58ede32 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -856,9 +856,11 @@ static void perf_evlist__mmap_get(struct perf_evlist *evlist, int idx) static void perf_evlist__mmap_put(struct perf_evlist *evlist, int idx) { - BUG_ON(atomic_read(&evlist->mmap[idx].refcnt) == 0); + struct perf_mmap *md = &evlist->mmap[idx]; + + BUG_ON(md->base && atomic_read(&md->refcnt) == 0); - if (atomic_dec_and_test(&evlist->mmap[idx].refcnt)) + if (atomic_dec_and_test(&md->refcnt)) __perf_evlist__munmap(evlist, idx); }