From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752661AbdLFQkV (ORCPT ); Wed, 6 Dec 2017 11:40:21 -0500 Received: from merlin.infradead.org ([205.233.59.134]:56926 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751323AbdLFQkS (ORCPT ); Wed, 6 Dec 2017 11:40:18 -0500 Date: Wed, 6 Dec 2017 17:39:51 +0100 From: Peter Zijlstra To: Namhyung Kim Cc: Arnaldo Carvalho de Melo , Fengguang Wu , linux-kernel@vger.kernel.org, Wang Nan , Ingo Molnar , Alexander Shishkin , Jiri Olsa , Linus Torvalds , Will Deacon , lkp@01.org, Dmitry Vyukov , kasan-dev@googlegroups.com, kernel-team@lge.com Subject: Re: BUG: KASAN: slab-out-of-bounds in perf_callchain_user+0x494/0x530 Message-ID: <20171206163951.fyden6m4vamkjbqi@hirez.programming.kicks-ass.net> References: <20171130023218.g2y35nn4zyufqk6t@wfg-t540p.sh.intel.com> <20171130082026.ih7esfpn4wfsfoge@hirez.programming.kicks-ass.net> <20171130193712.GU3298@kernel.org> <20171205081156.GB16663@sejong> <20171205133740.GA28405@kernel.org> <20171205144718.GA27916@danjae.aot.lge.com> <20171206134706.ahlr6ygnhtu2ik4s@hirez.programming.kicks-ass.net> <20171206143130.GA3367@danjae.aot.lge.com> <20171206154544.oiavdgfrpryak23z@hirez.programming.kicks-ass.net> <20171206154957.GB3367@danjae.aot.lge.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171206154957.GB3367@danjae.aot.lge.com> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Dec 07, 2017 at 12:49:57AM +0900, Namhyung Kim wrote: > So, are you ok with this? yeah, that should work. > diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c > index 1b2be63c8528..ee0ba22d3993 100644 > --- a/kernel/events/callchain.c > +++ b/kernel/events/callchain.c > @@ -137,8 +137,11 @@ int get_callchain_buffers(int event_max_stack) > > err = alloc_callchain_buffers(); > exit: > - if (err) > - atomic_dec(&nr_callchain_events); > + if (err) { > + /* might race with put_callchain_buffers() */ > + if (atomic_dec_and_test(&nr_callchain_events)) > + release_callchain_buffers(); > + } > > mutex_unlock(&callchain_mutex); >