From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753181AbcHUMKN (ORCPT ); Sun, 21 Aug 2016 08:10:13 -0400 Received: from mail-ua0-f195.google.com ([209.85.217.195]:33683 "EHLO mail-ua0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753147AbcHUMKK (ORCPT ); Sun, 21 Aug 2016 08:10:10 -0400 MIME-Version: 1.0 In-Reply-To: References: <1471467307-61171-2-git-send-email-davidcc@google.com> From: Vegard Nossum Date: Sun, 21 Aug 2016 14:10:07 +0200 Message-ID: Subject: Re: [tip:perf/core] perf/core: Check return value of the perf_event_read() IPI To: Thomas Gleixner , Stephane Eranian , Vince Weaver , Ingo Molnar , David Carrillo-Cisneros , Peter Zijlstra , "H. Peter Anvin" , Kan Liang , Arnaldo Carvalho de Melo , Paul Turner , "Vegard/gmail" , Linus Torvalds , jolsa@redhat.com, LKML , Alexander Shishkin Cc: linux-tip-commits@vger.kernel.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 18 August 2016 at 12:52, tip-bot for David Carrillo-Cisneros wrote: > Commit-ID: 71e7bc2bab77e64882c031c2af943c3256c1adb0 > Gitweb: http://git.kernel.org/tip/71e7bc2bab77e64882c031c2af943c3256c1adb0 > Author: David Carrillo-Cisneros > AuthorDate: Wed, 17 Aug 2016 13:55:04 -0700 > Committer: Ingo Molnar > CommitDate: Thu, 18 Aug 2016 10:35:52 +0200 > > perf/core: Check return value of the perf_event_read() IPI > > The call to smp_call_function_single in perf_event_read() may fail if > an invalid or not online CPU index is passed. Warn user if such bug is > present and return error. > > Signed-off-by: David Carrillo-Cisneros > Signed-off-by: Peter Zijlstra (Intel) > Cc: Alexander Shishkin > Cc: Arnaldo Carvalho de Melo > Cc: Jiri Olsa > Cc: Kan Liang > Cc: Linus Torvalds > Cc: Paul Turner > Cc: Peter Zijlstra > Cc: Stephane Eranian > Cc: Thomas Gleixner > Cc: Vegard Nossum > Cc: Vince Weaver > Link: http://lkml.kernel.org/r/1471467307-61171-2-git-send-email-davidcc@google.com > Signed-off-by: Ingo Molnar > --- > kernel/events/core.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/kernel/events/core.c b/kernel/events/core.c > index a5fc5c8..5650f53 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -3549,9 +3549,10 @@ static int perf_event_read(struct perf_event *event, bool group) > .group = group, > .ret = 0, > }; > - smp_call_function_single(event->oncpu, > - __perf_event_read, &data, 1); > - ret = data.ret; > + ret = smp_call_function_single(event->oncpu, __perf_event_read, &data, 1); > + /* The event must have been read from an online CPU: */ > + WARN_ON_ONCE(ret); > + ret = ret ? : data.ret; > } else if (event->state == PERF_EVENT_STATE_INACTIVE) { > struct perf_event_context *ctx = event->ctx; > unsigned long flags; Hi, I'm running into this new warning now: ------------[ cut here ]------------ WARNING: CPU: 0 PID: 23442 at kernel/events/core.c:3554 perf_event_read+0x472/0x590 Kernel panic - not syncing: panic_on_warn set ... CPU: 0 PID: 23442 Comm: syz-executor Not tainted 4.8.0-rc2+ #145 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014 0000000000000000 ffff88010d1bf808 ffffffff81f9f201 ffffffff83e72d60 ffff88010d1bf8e0 ffffffff83ecbd00 ffffffff847070c0 ffff88010d1bf8d0 ffffffff8150538a 0000000041b58ab3 ffffffff844dc5dd ffffffff815051a7 Call Trace: [] dump_stack+0x83/0xb2 [] panic+0x1e3/0x3a1 [] ? set_ti_thread_flag+0x1e/0x1e [] ? rt_mutex_top_waiter.part.10+0x6/0x6 [] ? generic_exec_single+0xf0/0x2d0 [] ? perf_event_read+0x472/0x590 [] __warn+0x1bf/0x1e0 [] warn_slowpath_null+0x2c/0x40 [] perf_event_read+0x472/0x590 [] ? perf_event_set_addr_filter+0xad0/0xad0 [] ? perf_event_ctx_lock_nested+0xdd/0x1e0 [] perf_event_read_value+0x84/0x520 [] ? perf_event_ctx_lock_nested+0x19c/0x1e0 [] ? perf_event_ctx_lock_nested+0x3b/0x1e0 [] perf_read+0x443/0x8d0 [] ? perf_event_read_value+0x520/0x520 [] ? common_file_perm+0x2e2/0x380 [] do_loop_readv_writev+0x152/0x200 [] ? security_file_permission+0x86/0x1e0 [] ? perf_event_read_value+0x520/0x520 [] ? perf_event_read_value+0x520/0x520 [] do_readv_writev+0x614/0x700 [] ? rw_verify_area+0x2b0/0x2b0 [] ? put_ctx+0x22/0x100 [] ? __fget+0x1c1/0x270 [] ? __fget+0x47/0x270 [] vfs_readv+0x8b/0xc0 [] do_readv+0xde/0x230 [] ? vfs_readv+0xc0/0xc0 [] ? exit_to_usermode_loop+0x190/0x190 [] ? check_preemption_disabled+0x37/0x1e0 [] SyS_readv+0x27/0x30 [] ? do_pwritev+0x1a0/0x1a0 [] do_syscall_64+0x1c4/0x4e0 [] entry_SYSCALL64_slow_path+0x25/0x25 I don't think WARN() is the right interface for signalling errors to userspace programs? Vegard