From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754227AbcEXFsn (ORCPT ); Tue, 24 May 2016 01:48:43 -0400 Received: from terminus.zytor.com ([198.137.202.10]:51976 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754041AbcEXFsm (ORCPT ); Tue, 24 May 2016 01:48:42 -0400 Date: Mon, 23 May 2016 22:48:26 -0700 From: tip-bot for Wang Nan Message-ID: Cc: tglx@linutronix.de, hpa@zytor.com, mingo@kernel.org, masami.hiramatsu.pt@hitachi.com, linux-kernel@vger.kernel.org, wangnan0@huawei.com, lizefan@huawei.com, hekuang@huawei.com, namhyung@kernel.org, jolsa@kernel.org, acme@redhat.com Reply-To: linux-kernel@vger.kernel.org, masami.hiramatsu.pt@hitachi.com, acme@redhat.com, namhyung@kernel.org, jolsa@kernel.org, hekuang@huawei.com, lizefan@huawei.com, wangnan0@huawei.com, hpa@zytor.com, tglx@linutronix.de, mingo@kernel.org In-Reply-To: <1463987628-163563-3-git-send-email-wangnan0@huawei.com> References: <1463987628-163563-3-git-send-email-wangnan0@huawei.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/urgent] perf record: Prevent reading invalid data in record__mmap_read Git-Commit-ID: 2d11c65071d489e20b3a811167507939dd8c2eac 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: 2d11c65071d489e20b3a811167507939dd8c2eac Gitweb: http://git.kernel.org/tip/2d11c65071d489e20b3a811167507939dd8c2eac Author: Wang Nan AuthorDate: Mon, 23 May 2016 07:13:39 +0000 Committer: Arnaldo Carvalho de Melo CommitDate: Mon, 23 May 2016 18:22:46 -0300 perf record: Prevent reading invalid data in record__mmap_read When record__mmap_read() requires data more than the size of ring buffer, drop those data to avoid accessing invalid memory. This can happen when reading from overwritable ring buffer, which should be avoided. However, check this for robustness. Signed-off-by: Wang Nan Cc: Jiri Olsa Cc: Masami Hiramatsu Cc: Namhyung Kim Cc: Zefan Li Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1463987628-163563-3-git-send-email-wangnan0@huawei.com Signed-off-by: He Kuang Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-record.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index f3679c4..f302cc9 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -40,6 +40,7 @@ #include #include #include +#include struct record { @@ -98,6 +99,13 @@ static int record__mmap_read(struct record *rec, int idx) rec->samples++; size = head - old; + if (size > (unsigned long)(md->mask) + 1) { + WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n"); + + md->prev = head; + perf_evlist__mmap_consume(rec->evlist, idx); + return 0; + } if ((old & md->mask) + size != (head & md->mask)) { buf = &data[old & md->mask];