From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A17CCC433E1 for ; Thu, 13 Aug 2020 01:46:59 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7150221775 for ; Thu, 13 Aug 2020 01:46:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="p0wUTrLE"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="PVYnGy0Z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7150221775 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Date:To:From: Subject:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=J4OqebYh0E+tqYVzNWz08/JP0auDP52kMzm9Fb4200g=; b=p0wUTrLE4EULkRrONGXD8KYS8 LwE+Fk1nYx1DELf5l3amkZSOsynXjX6dJEDmkbwnzvRsyWT4YPbixz3PGXIG+9G0/aOgn4hb2fqj5 fwODryPWyDu7I5kLwyVLihWfw/8YL0Gwoc9Gy1c8+8jm1u70WngQ0lxnmc9L7rEOT52BdFBNT2bM+ n/F/EZDTEYNVttRT8TP3vzpm3V9aE41LbffB5SWsO+69ibqUWLvzYFPycKEG+vJSVG6b+VEBmV4aJ lFBWYHcvI/fL0TQle8r+O5UWR+ZL4XHBlAd63NStppGOJgZevFLHutIo430Qor2+/txpK0y+WLBq/ hoTbyR2gw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k62KO-0000Sv-IC; Thu, 13 Aug 2020 01:46:48 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k62KJ-0000Rf-UK; Thu, 13 Aug 2020 01:46:45 +0000 X-UUID: 35d6b568a0514bc5933790c3e7e27d45-20200812 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=asJV3IBv1/0dhV/oRZH8LjXOLv7AOsr87CflwjOG1gY=; b=PVYnGy0ZK311eNEtTn2eQmP3xSy5bUO3wADqWYO4OGKZRd21CPQXoGLDpw6KidMHoHJqQFYZVqjd5KqftvCA55YxNTcywwQwq0WrwKvTgpoYF0IAaDNoQawR29c4nbIraJkRSMSmCL8sk05nNlKBwn42ciaBiAn5Cuo1AgxgGI8=; X-UUID: 35d6b568a0514bc5933790c3e7e27d45-20200812 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 255767147; Wed, 12 Aug 2020 17:46:22 -0800 Received: from MTKMBS01N2.mediatek.inc (172.21.101.79) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 12 Aug 2020 18:46:17 -0700 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 13 Aug 2020 09:46:19 +0800 Received: from [172.21.84.99] (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 13 Aug 2020 09:46:15 +0800 Message-ID: <1597283178.9999.19.camel@mtksdccf07> Subject: Re: [PATCH 1/5] timer: kasan: record and print timer stack From: Walter Wu To: Marco Elver Date: Thu, 13 Aug 2020 09:46:18 +0800 In-Reply-To: References: <20200810072313.529-1-walter-zh.wu@mediatek.com> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-TM-SNTS-SMTP: A828CD4FB1E137D0EE7E3C33E0D2CE14A46CDB2C1BF3FFD27ED08E538949AC012000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200812_214644_105934_D5EC2E55 X-CRM114-Status: GOOD ( 41.32 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Stultz , wsd_upstream , Stephen Boyd , linux-mediatek@lists.infradead.org, LKML , kasan-dev , Linux Memory Management List , Alexander Potapenko , Linux ARM , Matthias Brugger , Andrey Ryabinin , Andrew Morton , Thomas Gleixner , Dmitry Vyukov Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Wed, 2020-08-12 at 16:13 +0200, Marco Elver wrote: > On Mon, 10 Aug 2020 at 09:23, Walter Wu wrote: > > This patch records the last two timer queueing stacks and prints > > up to 2 timer stacks in KASAN report. It is useful for programmers > > to solve use-after-free or double-free memory timer issues. > > > > When timer_setup() or timer_setup_on_stack() is called, then it > > prepares to use this timer and sets timer callback, we store > > this call stack in order to print it in KASAN report. > > > > Signed-off-by: Walter Wu > > Cc: Andrey Ryabinin > > Cc: Dmitry Vyukov > > Cc: Alexander Potapenko > > Cc: Thomas Gleixner > > Cc: John Stultz > > Cc: Stephen Boyd > > Cc: Andrew Morton > > --- > > include/linux/kasan.h | 2 ++ > > kernel/time/timer.c | 2 ++ > > mm/kasan/generic.c | 21 +++++++++++++++++++++ > > mm/kasan/kasan.h | 4 +++- > > mm/kasan/report.c | 11 +++++++++++ > > 5 files changed, 39 insertions(+), 1 deletion(-) > > I'm commenting on the code here, but it also applies to patch 2/5, as > it's almost a copy-paste. > > In general, I'd say the solution to get this feature is poorly > designed, resulting in excessive LOC added. The logic added already > exists for the aux stacks. > That's true, we will have refactoring for it. > > diff --git a/include/linux/kasan.h b/include/linux/kasan.h > > index 23b7ee00572d..763664b36dc6 100644 > > --- a/include/linux/kasan.h > > +++ b/include/linux/kasan.h > > @@ -175,12 +175,14 @@ static inline size_t kasan_metadata_size(struct kmem_cache *cache) { return 0; } > > void kasan_cache_shrink(struct kmem_cache *cache); > > void kasan_cache_shutdown(struct kmem_cache *cache); > > void kasan_record_aux_stack(void *ptr); > > +void kasan_record_tmr_stack(void *ptr); > > > > #else /* CONFIG_KASAN_GENERIC */ > > > > static inline void kasan_cache_shrink(struct kmem_cache *cache) {} > > static inline void kasan_cache_shutdown(struct kmem_cache *cache) {} > > static inline void kasan_record_aux_stack(void *ptr) {} > > +static inline void kasan_record_tmr_stack(void *ptr) {} > > It appears that the 'aux' stack is currently only used for call_rcu > stacks, but this interface does not inherently tie it to call_rcu. The > only thing tying it to call_rcu is the fact that the report calls out > call_rcu. > > > /** > > diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c > > index 4b3cbad7431b..f35dcec990ab 100644 > > --- a/mm/kasan/generic.c > > +++ b/mm/kasan/generic.c > > @@ -347,6 +347,27 @@ void kasan_record_aux_stack(void *addr) > > alloc_info->aux_stack[0] = kasan_save_stack(GFP_NOWAIT); > > } > > > > +void kasan_record_tmr_stack(void *addr) > > +{ > > + struct page *page = kasan_addr_to_page(addr); > > + struct kmem_cache *cache; > > + struct kasan_alloc_meta *alloc_info; > > + void *object; > > + > > + if (!(page && PageSlab(page))) > > + return; > > + > > + cache = page->slab_cache; > > + object = nearest_obj(cache, page, addr); > > + alloc_info = get_alloc_info(cache, object); > > + > > + /* > > + * record the last two timer stacks. > > + */ > > + alloc_info->tmr_stack[1] = alloc_info->tmr_stack[0]; > > + alloc_info->tmr_stack[0] = kasan_save_stack(GFP_NOWAIT); > > +} > > The solution here is, unfortunately, poorly designed. This is a > copy-paste of the kasan_record_aux_stack() function. > kasan_record_aux_stack() will be re-used for call_rcu, timer, and workqueue. > > void kasan_set_free_info(struct kmem_cache *cache, > > void *object, u8 tag) > > { > > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > > index ef655a1c6e15..c50827f388a3 100644 > > --- a/mm/kasan/kasan.h > > +++ b/mm/kasan/kasan.h > > @@ -108,10 +108,12 @@ struct kasan_alloc_meta { > > struct kasan_track alloc_track; > > #ifdef CONFIG_KASAN_GENERIC > > /* > > - * call_rcu() call stack is stored into struct kasan_alloc_meta. > > + * call_rcu() call stack and timer queueing stack are stored > > + * into struct kasan_alloc_meta. > > * The free stack is stored into struct kasan_free_meta. > > */ > > depot_stack_handle_t aux_stack[2]; > > + depot_stack_handle_t tmr_stack[2]; > > #else > > struct kasan_track free_track[KASAN_NR_FREE_STACKS]; > > #endif > > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > > index fed3c8fdfd25..6fa3bfee381f 100644 > > --- a/mm/kasan/report.c > > +++ b/mm/kasan/report.c > > @@ -191,6 +191,17 @@ static void describe_object(struct kmem_cache *cache, void *object, > > print_stack(alloc_info->aux_stack[1]); > > pr_err("\n"); > > } > > + > > + if (alloc_info->tmr_stack[0]) { > > + pr_err("Last timer stack:\n"); > > + print_stack(alloc_info->tmr_stack[0]); > > + pr_err("\n"); > > + } > > + if (alloc_info->tmr_stack[1]) { > > + pr_err("Second to last timer stack:\n"); > > + print_stack(alloc_info->tmr_stack[1]); > > + pr_err("\n"); > > + } > > Why can't we just use the aux stack for everything, and simply change > the message printed in the report. After all, the stack trace will > include all the information to tell if it's call_rcu, timer, or > workqueue. > This is a good suggestion, next patch will do it. > The reporting code would simply have to be changed to say something > like "Last potentially related work creation:" -- because what the > "aux" thing is trying to abstract are stack traces to work creations > that took an address that is closely related. Whether or not you want > to call it "work" is up to you, but that's the most generic term I > could think of right now (any better terms?). > Work is good. > Another argument for this consolidation is that it's highly unlikely > that aux_stack[a] && tmr_stack[b] && wq_stack[c], and you need to > print all the stacks. If you are worried we need more aux stacks, just > make the array size 3+ (but I think it's not necessary). > We hope that next patch keep it as it is aux_stack[2], it may record call_rcu, timer, or workqueue. Because struct kasan_alloc_meta is 16 bytes, it will have the minimal redzone size and good alignment, lets get better memory consumption. Thanks for your good suggestion. Walter > Thanks, > -- Marco _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F17E0C433E0 for ; Thu, 13 Aug 2020 01:48:32 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id BECED21775 for ; Thu, 13 Aug 2020 01:48:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="gLPhdXD4"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="PVYnGy0Z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BECED21775 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Date:To:From: Subject:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=YwsyTLXLacZ9ygJIeHf4udHaQ/TQptENjMGsDac5M/E=; b=gLPhdXD4GSyvPgKGa3jwtXYdl XlS6Lnaiaoh8au4Ulp0E7r+VhCBsAhIYmqCqtqcWSN0MFaSzmOO50fZcY26I1j6gNFUn6QnVaKNqw gdXHwRoamDoDn5Xo7yxoEJ7Mutlv5wj5UU5tOkTjYnOGa8R1zZUR862MJWGPcOPET61wu+NRah/Fj pN6s2WQa+taoO07YaqShRCVr1YoQv0EB+RzoiKQJAUPMilvRrK14/EcwsoF/2m3fxyruxezNIP0sb G20bGiOWPpxIJzAV4zCYZuw+4VM7o/d+r5lUb4EWpMoKnyxZo6zzYjn8T1UQpfTEelHtMcyyeH5ZI +GD0R3Orw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1k62KM-0000SZ-J2; Thu, 13 Aug 2020 01:46:46 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1k62KJ-0000Rf-UK; Thu, 13 Aug 2020 01:46:45 +0000 X-UUID: 35d6b568a0514bc5933790c3e7e27d45-20200812 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=asJV3IBv1/0dhV/oRZH8LjXOLv7AOsr87CflwjOG1gY=; b=PVYnGy0ZK311eNEtTn2eQmP3xSy5bUO3wADqWYO4OGKZRd21CPQXoGLDpw6KidMHoHJqQFYZVqjd5KqftvCA55YxNTcywwQwq0WrwKvTgpoYF0IAaDNoQawR29c4nbIraJkRSMSmCL8sk05nNlKBwn42ciaBiAn5Cuo1AgxgGI8=; X-UUID: 35d6b568a0514bc5933790c3e7e27d45-20200812 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 255767147; Wed, 12 Aug 2020 17:46:22 -0800 Received: from MTKMBS01N2.mediatek.inc (172.21.101.79) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 12 Aug 2020 18:46:17 -0700 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 13 Aug 2020 09:46:19 +0800 Received: from [172.21.84.99] (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 13 Aug 2020 09:46:15 +0800 Message-ID: <1597283178.9999.19.camel@mtksdccf07> Subject: Re: [PATCH 1/5] timer: kasan: record and print timer stack From: Walter Wu To: Marco Elver Date: Thu, 13 Aug 2020 09:46:18 +0800 In-Reply-To: References: <20200810072313.529-1-walter-zh.wu@mediatek.com> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-TM-SNTS-SMTP: A828CD4FB1E137D0EE7E3C33E0D2CE14A46CDB2C1BF3FFD27ED08E538949AC012000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200812_214644_105934_D5EC2E55 X-CRM114-Status: GOOD ( 41.32 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: John Stultz , wsd_upstream , Stephen Boyd , linux-mediatek@lists.infradead.org, LKML , kasan-dev , Linux Memory Management List , Alexander Potapenko , Linux ARM , Matthias Brugger , Andrey Ryabinin , Andrew Morton , Thomas Gleixner , Dmitry Vyukov Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Wed, 2020-08-12 at 16:13 +0200, Marco Elver wrote: > On Mon, 10 Aug 2020 at 09:23, Walter Wu wrote: > > This patch records the last two timer queueing stacks and prints > > up to 2 timer stacks in KASAN report. It is useful for programmers > > to solve use-after-free or double-free memory timer issues. > > > > When timer_setup() or timer_setup_on_stack() is called, then it > > prepares to use this timer and sets timer callback, we store > > this call stack in order to print it in KASAN report. > > > > Signed-off-by: Walter Wu > > Cc: Andrey Ryabinin > > Cc: Dmitry Vyukov > > Cc: Alexander Potapenko > > Cc: Thomas Gleixner > > Cc: John Stultz > > Cc: Stephen Boyd > > Cc: Andrew Morton > > --- > > include/linux/kasan.h | 2 ++ > > kernel/time/timer.c | 2 ++ > > mm/kasan/generic.c | 21 +++++++++++++++++++++ > > mm/kasan/kasan.h | 4 +++- > > mm/kasan/report.c | 11 +++++++++++ > > 5 files changed, 39 insertions(+), 1 deletion(-) > > I'm commenting on the code here, but it also applies to patch 2/5, as > it's almost a copy-paste. > > In general, I'd say the solution to get this feature is poorly > designed, resulting in excessive LOC added. The logic added already > exists for the aux stacks. > That's true, we will have refactoring for it. > > diff --git a/include/linux/kasan.h b/include/linux/kasan.h > > index 23b7ee00572d..763664b36dc6 100644 > > --- a/include/linux/kasan.h > > +++ b/include/linux/kasan.h > > @@ -175,12 +175,14 @@ static inline size_t kasan_metadata_size(struct kmem_cache *cache) { return 0; } > > void kasan_cache_shrink(struct kmem_cache *cache); > > void kasan_cache_shutdown(struct kmem_cache *cache); > > void kasan_record_aux_stack(void *ptr); > > +void kasan_record_tmr_stack(void *ptr); > > > > #else /* CONFIG_KASAN_GENERIC */ > > > > static inline void kasan_cache_shrink(struct kmem_cache *cache) {} > > static inline void kasan_cache_shutdown(struct kmem_cache *cache) {} > > static inline void kasan_record_aux_stack(void *ptr) {} > > +static inline void kasan_record_tmr_stack(void *ptr) {} > > It appears that the 'aux' stack is currently only used for call_rcu > stacks, but this interface does not inherently tie it to call_rcu. The > only thing tying it to call_rcu is the fact that the report calls out > call_rcu. > > > /** > > diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c > > index 4b3cbad7431b..f35dcec990ab 100644 > > --- a/mm/kasan/generic.c > > +++ b/mm/kasan/generic.c > > @@ -347,6 +347,27 @@ void kasan_record_aux_stack(void *addr) > > alloc_info->aux_stack[0] = kasan_save_stack(GFP_NOWAIT); > > } > > > > +void kasan_record_tmr_stack(void *addr) > > +{ > > + struct page *page = kasan_addr_to_page(addr); > > + struct kmem_cache *cache; > > + struct kasan_alloc_meta *alloc_info; > > + void *object; > > + > > + if (!(page && PageSlab(page))) > > + return; > > + > > + cache = page->slab_cache; > > + object = nearest_obj(cache, page, addr); > > + alloc_info = get_alloc_info(cache, object); > > + > > + /* > > + * record the last two timer stacks. > > + */ > > + alloc_info->tmr_stack[1] = alloc_info->tmr_stack[0]; > > + alloc_info->tmr_stack[0] = kasan_save_stack(GFP_NOWAIT); > > +} > > The solution here is, unfortunately, poorly designed. This is a > copy-paste of the kasan_record_aux_stack() function. > kasan_record_aux_stack() will be re-used for call_rcu, timer, and workqueue. > > void kasan_set_free_info(struct kmem_cache *cache, > > void *object, u8 tag) > > { > > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > > index ef655a1c6e15..c50827f388a3 100644 > > --- a/mm/kasan/kasan.h > > +++ b/mm/kasan/kasan.h > > @@ -108,10 +108,12 @@ struct kasan_alloc_meta { > > struct kasan_track alloc_track; > > #ifdef CONFIG_KASAN_GENERIC > > /* > > - * call_rcu() call stack is stored into struct kasan_alloc_meta. > > + * call_rcu() call stack and timer queueing stack are stored > > + * into struct kasan_alloc_meta. > > * The free stack is stored into struct kasan_free_meta. > > */ > > depot_stack_handle_t aux_stack[2]; > > + depot_stack_handle_t tmr_stack[2]; > > #else > > struct kasan_track free_track[KASAN_NR_FREE_STACKS]; > > #endif > > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > > index fed3c8fdfd25..6fa3bfee381f 100644 > > --- a/mm/kasan/report.c > > +++ b/mm/kasan/report.c > > @@ -191,6 +191,17 @@ static void describe_object(struct kmem_cache *cache, void *object, > > print_stack(alloc_info->aux_stack[1]); > > pr_err("\n"); > > } > > + > > + if (alloc_info->tmr_stack[0]) { > > + pr_err("Last timer stack:\n"); > > + print_stack(alloc_info->tmr_stack[0]); > > + pr_err("\n"); > > + } > > + if (alloc_info->tmr_stack[1]) { > > + pr_err("Second to last timer stack:\n"); > > + print_stack(alloc_info->tmr_stack[1]); > > + pr_err("\n"); > > + } > > Why can't we just use the aux stack for everything, and simply change > the message printed in the report. After all, the stack trace will > include all the information to tell if it's call_rcu, timer, or > workqueue. > This is a good suggestion, next patch will do it. > The reporting code would simply have to be changed to say something > like "Last potentially related work creation:" -- because what the > "aux" thing is trying to abstract are stack traces to work creations > that took an address that is closely related. Whether or not you want > to call it "work" is up to you, but that's the most generic term I > could think of right now (any better terms?). > Work is good. > Another argument for this consolidation is that it's highly unlikely > that aux_stack[a] && tmr_stack[b] && wq_stack[c], and you need to > print all the stacks. If you are worried we need more aux stacks, just > make the array size 3+ (but I think it's not necessary). > We hope that next patch keep it as it is aux_stack[2], it may record call_rcu, timer, or workqueue. Because struct kasan_alloc_meta is 16 bytes, it will have the minimal redzone size and good alignment, lets get better memory consumption. Thanks for your good suggestion. Walter > Thanks, > -- Marco _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2F6F8C433E1 for ; Thu, 13 Aug 2020 01:46:29 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C01312184D for ; Thu, 13 Aug 2020 01:46:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="PVYnGy0Z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C01312184D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 1CA2D6B0031; Wed, 12 Aug 2020 21:46:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 179106B0032; Wed, 12 Aug 2020 21:46:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 08F568D0002; Wed, 12 Aug 2020 21:46:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0120.hostedemail.com [216.40.44.120]) by kanga.kvack.org (Postfix) with ESMTP id E7C4E6B0031 for ; Wed, 12 Aug 2020 21:46:27 -0400 (EDT) Received: from smtpin18.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id A80B9181AC9BF for ; Thu, 13 Aug 2020 01:46:27 +0000 (UTC) X-FDA: 77143855614.18.care32_0b1212c26ff0 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin18.hostedemail.com (Postfix) with ESMTP id 623EF100EC693 for ; Thu, 13 Aug 2020 01:46:27 +0000 (UTC) X-HE-Tag: care32_0b1212c26ff0 X-Filterd-Recvd-Size: 12152 Received: from mailgw01.mediatek.com (unknown [210.61.82.183]) by imf12.hostedemail.com (Postfix) with ESMTP for ; Thu, 13 Aug 2020 01:46:25 +0000 (UTC) X-UUID: a83d17fcab4e4f118142b12a28016c02-20200813 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=asJV3IBv1/0dhV/oRZH8LjXOLv7AOsr87CflwjOG1gY=; b=PVYnGy0ZK311eNEtTn2eQmP3xSy5bUO3wADqWYO4OGKZRd21CPQXoGLDpw6KidMHoHJqQFYZVqjd5KqftvCA55YxNTcywwQwq0WrwKvTgpoYF0IAaDNoQawR29c4nbIraJkRSMSmCL8sk05nNlKBwn42ciaBiAn5Cuo1AgxgGI8=; X-UUID: a83d17fcab4e4f118142b12a28016c02-20200813 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 636757711; Thu, 13 Aug 2020 09:46:21 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 13 Aug 2020 09:46:19 +0800 Received: from [172.21.84.99] (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 13 Aug 2020 09:46:15 +0800 Message-ID: <1597283178.9999.19.camel@mtksdccf07> Subject: Re: [PATCH 1/5] timer: kasan: record and print timer stack From: Walter Wu To: Marco Elver CC: Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Matthias Brugger , John Stultz , "Stephen Boyd" , Andrew Morton , kasan-dev , Linux Memory Management List , LKML , Linux ARM , wsd_upstream , , "Thomas Gleixner" Date: Thu, 13 Aug 2020 09:46:18 +0800 In-Reply-To: References: <20200810072313.529-1-walter-zh.wu@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-TM-SNTS-SMTP: A828CD4FB1E137D0EE7E3C33E0D2CE14A46CDB2C1BF3FFD27ED08E538949AC012000:8 X-MTK: N Content-Transfer-Encoding: base64 X-Rspamd-Queue-Id: 623EF100EC693 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam03 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: T24gV2VkLCAyMDIwLTA4LTEyIGF0IDE2OjEzICswMjAwLCBNYXJjbyBFbHZlciB3cm90ZToNCj4g T24gTW9uLCAxMCBBdWcgMjAyMCBhdCAwOToyMywgV2FsdGVyIFd1IDx3YWx0ZXItemgud3VAbWVk aWF0ZWsuY29tPiB3cm90ZToNCj4gPiBUaGlzIHBhdGNoIHJlY29yZHMgdGhlIGxhc3QgdHdvIHRp bWVyIHF1ZXVlaW5nIHN0YWNrcyBhbmQgcHJpbnRzDQo+ID4gdXAgdG8gMiB0aW1lciBzdGFja3Mg aW4gS0FTQU4gcmVwb3J0LiBJdCBpcyB1c2VmdWwgZm9yIHByb2dyYW1tZXJzDQo+ID4gdG8gc29s dmUgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUgbWVtb3J5IHRpbWVyIGlzc3Vlcy4NCj4g Pg0KPiA+IFdoZW4gdGltZXJfc2V0dXAoKSBvciB0aW1lcl9zZXR1cF9vbl9zdGFjaygpIGlzIGNh bGxlZCwgdGhlbiBpdA0KPiA+IHByZXBhcmVzIHRvIHVzZSB0aGlzIHRpbWVyIGFuZCBzZXRzIHRp bWVyIGNhbGxiYWNrLCB3ZSBzdG9yZQ0KPiA+IHRoaXMgY2FsbCBzdGFjayBpbiBvcmRlciB0byBw cmludCBpdCBpbiBLQVNBTiByZXBvcnQuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBXYWx0ZXIg V3UgPHdhbHRlci16aC53dUBtZWRpYXRlay5jb20+DQo+ID4gQ2M6IEFuZHJleSBSeWFiaW5pbiA8 YXJ5YWJpbmluQHZpcnR1b3p6by5jb20+DQo+ID4gQ2M6IERtaXRyeSBWeXVrb3YgPGR2eXVrb3ZA Z29vZ2xlLmNvbT4NCj4gPiBDYzogQWxleGFuZGVyIFBvdGFwZW5rbyA8Z2xpZGVyQGdvb2dsZS5j b20+DQo+ID4gQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPg0KPiA+IENj OiBKb2huIFN0dWx0eiA8am9obi5zdHVsdHpAbGluYXJvLm9yZz4NCj4gPiBDYzogU3RlcGhlbiBC b3lkIDxzYm95ZEBrZXJuZWwub3JnPg0KPiA+IENjOiBBbmRyZXcgTW9ydG9uIDxha3BtQGxpbnV4 LWZvdW5kYXRpb24ub3JnPg0KPiA+IC0tLQ0KPiA+ICBpbmNsdWRlL2xpbnV4L2thc2FuLmggfCAg MiArKw0KPiA+ICBrZXJuZWwvdGltZS90aW1lci5jICAgfCAgMiArKw0KPiA+ICBtbS9rYXNhbi9n ZW5lcmljLmMgICAgfCAyMSArKysrKysrKysrKysrKysrKysrKysNCj4gPiAgbW0va2FzYW4va2Fz YW4uaCAgICAgIHwgIDQgKysrLQ0KPiA+ICBtbS9rYXNhbi9yZXBvcnQuYyAgICAgfCAxMSArKysr KysrKysrKw0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkNCj4gDQo+IEknbSBjb21tZW50aW5nIG9uIHRoZSBjb2RlIGhlcmUsIGJ1dCBpdCBhbHNv IGFwcGxpZXMgdG8gcGF0Y2ggMi81LCBhcw0KPiBpdCdzIGFsbW9zdCBhIGNvcHktcGFzdGUuDQo+ IA0KPiBJbiBnZW5lcmFsLCBJJ2Qgc2F5IHRoZSBzb2x1dGlvbiB0byBnZXQgdGhpcyBmZWF0dXJl IGlzIHBvb3JseQ0KPiBkZXNpZ25lZCwgcmVzdWx0aW5nIGluIGV4Y2Vzc2l2ZSBMT0MgYWRkZWQu IFRoZSBsb2dpYyBhZGRlZCBhbHJlYWR5DQo+IGV4aXN0cyBmb3IgdGhlIGF1eCBzdGFja3MuDQo+ IA0KDQpUaGF0J3MgdHJ1ZSwgd2Ugd2lsbCBoYXZlIHJlZmFjdG9yaW5nIGZvciBpdC4NCg0KPiA+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2thc2FuLmggYi9pbmNsdWRlL2xpbnV4L2thc2Fu LmgNCj4gPiBpbmRleCAyM2I3ZWUwMDU3MmQuLjc2MzY2NGIzNmRjNiAxMDA2NDQNCj4gPiAtLS0g YS9pbmNsdWRlL2xpbnV4L2thc2FuLmgNCj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L2thc2FuLmgN Cj4gPiBAQCAtMTc1LDEyICsxNzUsMTQgQEAgc3RhdGljIGlubGluZSBzaXplX3Qga2FzYW5fbWV0 YWRhdGFfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpIHsgcmV0dXJuIDA7IH0NCj4gPiAg dm9pZCBrYXNhbl9jYWNoZV9zaHJpbmsoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlKTsNCj4gPiAg dm9pZCBrYXNhbl9jYWNoZV9zaHV0ZG93bihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUpOw0KPiA+ ICB2b2lkIGthc2FuX3JlY29yZF9hdXhfc3RhY2sodm9pZCAqcHRyKTsNCj4gPiArdm9pZCBrYXNh bl9yZWNvcmRfdG1yX3N0YWNrKHZvaWQgKnB0cik7DQo+ID4NCj4gPiAgI2Vsc2UgLyogQ09ORklH X0tBU0FOX0dFTkVSSUMgKi8NCj4gPg0KPiA+ICBzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fY2Fj aGVfc2hyaW5rKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkge30NCj4gPiAgc3RhdGljIGlubGlu ZSB2b2lkIGthc2FuX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZSkge30N Cj4gPiAgc3RhdGljIGlubGluZSB2b2lkIGthc2FuX3JlY29yZF9hdXhfc3RhY2sodm9pZCAqcHRy KSB7fQ0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQga2FzYW5fcmVjb3JkX3Rtcl9zdGFjayh2b2lk ICpwdHIpIHt9DQo+IA0KPiBJdCBhcHBlYXJzIHRoYXQgdGhlICdhdXgnIHN0YWNrIGlzIGN1cnJl bnRseSBvbmx5IHVzZWQgZm9yIGNhbGxfcmN1DQo+IHN0YWNrcywgYnV0IHRoaXMgaW50ZXJmYWNl IGRvZXMgbm90IGluaGVyZW50bHkgdGllIGl0IHRvIGNhbGxfcmN1LiBUaGUNCj4gb25seSB0aGlu ZyB0eWluZyBpdCB0byBjYWxsX3JjdSBpcyB0aGUgZmFjdCB0aGF0IHRoZSByZXBvcnQgY2FsbHMg b3V0DQo+IGNhbGxfcmN1Lg0KPiANCj4gPiAgLyoqDQo+ID4gZGlmZiAtLWdpdCBhL21tL2thc2Fu L2dlbmVyaWMuYyBiL21tL2thc2FuL2dlbmVyaWMuYw0KPiA+IGluZGV4IDRiM2NiYWQ3NDMxYi4u ZjM1ZGNlYzk5MGFiIDEwMDY0NA0KPiA+IC0tLSBhL21tL2thc2FuL2dlbmVyaWMuYw0KPiA+ICsr KyBiL21tL2thc2FuL2dlbmVyaWMuYw0KPiA+IEBAIC0zNDcsNiArMzQ3LDI3IEBAIHZvaWQga2Fz YW5fcmVjb3JkX2F1eF9zdGFjayh2b2lkICphZGRyKQ0KPiA+ICAgICAgICAgYWxsb2NfaW5mby0+ YXV4X3N0YWNrWzBdID0ga2FzYW5fc2F2ZV9zdGFjayhHRlBfTk9XQUlUKTsNCj4gPiAgfQ0KPiA+ DQo+ID4gK3ZvaWQga2FzYW5fcmVjb3JkX3Rtcl9zdGFjayh2b2lkICphZGRyKQ0KPiA+ICt7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSA9IGthc2FuX2FkZHJfdG9fcGFnZShhZGRyKTsN Cj4gPiArICAgICAgIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZTsNCj4gPiArICAgICAgIHN0cnVj dCBrYXNhbl9hbGxvY19tZXRhICphbGxvY19pbmZvOw0KPiA+ICsgICAgICAgdm9pZCAqb2JqZWN0 Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmICghKHBhZ2UgJiYgUGFnZVNsYWIocGFnZSkpKQ0KPiA+ ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAgICAgY2FjaGUgPSBwYWdl LT5zbGFiX2NhY2hlOw0KPiA+ICsgICAgICAgb2JqZWN0ID0gbmVhcmVzdF9vYmooY2FjaGUsIHBh Z2UsIGFkZHIpOw0KPiA+ICsgICAgICAgYWxsb2NfaW5mbyA9IGdldF9hbGxvY19pbmZvKGNhY2hl LCBvYmplY3QpOw0KPiA+ICsNCj4gPiArICAgICAgIC8qDQo+ID4gKyAgICAgICAgKiByZWNvcmQg dGhlIGxhc3QgdHdvIHRpbWVyIHN0YWNrcy4NCj4gPiArICAgICAgICAqLw0KPiA+ICsgICAgICAg YWxsb2NfaW5mby0+dG1yX3N0YWNrWzFdID0gYWxsb2NfaW5mby0+dG1yX3N0YWNrWzBdOw0KPiA+ ICsgICAgICAgYWxsb2NfaW5mby0+dG1yX3N0YWNrWzBdID0ga2FzYW5fc2F2ZV9zdGFjayhHRlBf Tk9XQUlUKTsNCj4gPiArfQ0KPiANCj4gVGhlIHNvbHV0aW9uIGhlcmUgaXMsIHVuZm9ydHVuYXRl bHksIHBvb3JseSBkZXNpZ25lZC4gVGhpcyBpcyBhDQo+IGNvcHktcGFzdGUgb2YgdGhlIGthc2Fu X3JlY29yZF9hdXhfc3RhY2soKSBmdW5jdGlvbi4NCj4gDQoNCmthc2FuX3JlY29yZF9hdXhfc3Rh Y2soKSB3aWxsIGJlIHJlLXVzZWQgZm9yIGNhbGxfcmN1LCB0aW1lciwgYW5kDQp3b3JrcXVldWUu DQoNCj4gPiAgdm9pZCBrYXNhbl9zZXRfZnJlZV9pbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNo ZSwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9iamVjdCwgdTgg dGFnKQ0KPiA+ICB7DQo+ID4gZGlmZiAtLWdpdCBhL21tL2thc2FuL2thc2FuLmggYi9tbS9rYXNh bi9rYXNhbi5oDQo+ID4gaW5kZXggZWY2NTVhMWM2ZTE1Li5jNTA4MjdmMzg4YTMgMTAwNjQ0DQo+ ID4gLS0tIGEvbW0va2FzYW4va2FzYW4uaA0KPiA+ICsrKyBiL21tL2thc2FuL2thc2FuLmgNCj4g PiBAQCAtMTA4LDEwICsxMDgsMTIgQEAgc3RydWN0IGthc2FuX2FsbG9jX21ldGEgew0KPiA+ICAg ICAgICAgc3RydWN0IGthc2FuX3RyYWNrIGFsbG9jX3RyYWNrOw0KPiA+ICAjaWZkZWYgQ09ORklH X0tBU0FOX0dFTkVSSUMNCj4gPiAgICAgICAgIC8qDQo+ID4gLSAgICAgICAgKiBjYWxsX3JjdSgp IGNhbGwgc3RhY2sgaXMgc3RvcmVkIGludG8gc3RydWN0IGthc2FuX2FsbG9jX21ldGEuDQo+ID4g KyAgICAgICAgKiBjYWxsX3JjdSgpIGNhbGwgc3RhY2sgYW5kIHRpbWVyIHF1ZXVlaW5nIHN0YWNr IGFyZSBzdG9yZWQNCj4gPiArICAgICAgICAqIGludG8gc3RydWN0IGthc2FuX2FsbG9jX21ldGEu DQo+ID4gICAgICAgICAgKiBUaGUgZnJlZSBzdGFjayBpcyBzdG9yZWQgaW50byBzdHJ1Y3Qga2Fz YW5fZnJlZV9tZXRhLg0KPiA+ICAgICAgICAgICovDQo+ID4gICAgICAgICBkZXBvdF9zdGFja19o YW5kbGVfdCBhdXhfc3RhY2tbMl07DQo+ID4gKyAgICAgICBkZXBvdF9zdGFja19oYW5kbGVfdCB0 bXJfc3RhY2tbMl07DQo+ID4gICNlbHNlDQo+ID4gICAgICAgICBzdHJ1Y3Qga2FzYW5fdHJhY2sg ZnJlZV90cmFja1tLQVNBTl9OUl9GUkVFX1NUQUNLU107DQo+ID4gICNlbmRpZg0KPiA+IGRpZmYg LS1naXQgYS9tbS9rYXNhbi9yZXBvcnQuYyBiL21tL2thc2FuL3JlcG9ydC5jDQo+ID4gaW5kZXgg ZmVkM2M4ZmRmZDI1Li42ZmEzYmZlZTM4MWYgMTAwNjQ0DQo+ID4gLS0tIGEvbW0va2FzYW4vcmVw b3J0LmMNCj4gPiArKysgYi9tbS9rYXNhbi9yZXBvcnQuYw0KPiA+IEBAIC0xOTEsNiArMTkxLDE3 IEBAIHN0YXRpYyB2b2lkIGRlc2NyaWJlX29iamVjdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGUs IHZvaWQgKm9iamVjdCwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9zdGFjayhh bGxvY19pbmZvLT5hdXhfc3RhY2tbMV0pOw0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHBy X2VycigiXG4iKTsNCj4gPiAgICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgaWYgKGFsbG9jX2luZm8tPnRtcl9zdGFja1swXSkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHByX2VycigiTGFzdCB0aW1lciBzdGFjazpcbiIpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHByaW50X3N0YWNrKGFsbG9jX2luZm8tPnRtcl9zdGFja1swXSk7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCJcbiIpOw0KPiA+ICsgICAgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChhbGxvY19pbmZvLT50bXJfc3RhY2tbMV0pIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIlNlY29uZCB0byBsYXN0IHRpbWVy IHN0YWNrOlxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfc3RhY2soYWxs b2NfaW5mby0+dG1yX3N0YWNrWzFdKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9l cnIoIlxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gDQo+IFdoeSBjYW4ndCB3ZSBqdXN0 IHVzZSB0aGUgYXV4IHN0YWNrIGZvciBldmVyeXRoaW5nLCBhbmQgc2ltcGx5IGNoYW5nZQ0KPiB0 aGUgbWVzc2FnZSBwcmludGVkIGluIHRoZSByZXBvcnQuIEFmdGVyIGFsbCwgdGhlIHN0YWNrIHRy YWNlIHdpbGwNCj4gaW5jbHVkZSBhbGwgdGhlIGluZm9ybWF0aW9uIHRvIHRlbGwgaWYgaXQncyBj YWxsX3JjdSwgdGltZXIsIG9yDQo+IHdvcmtxdWV1ZS4NCj4gDQoNClRoaXMgaXMgYSBnb29kIHN1 Z2dlc3Rpb24sIG5leHQgcGF0Y2ggd2lsbCBkbyBpdC4NCg0KPiBUaGUgcmVwb3J0aW5nIGNvZGUg d291bGQgc2ltcGx5IGhhdmUgdG8gYmUgY2hhbmdlZCB0byBzYXkgc29tZXRoaW5nDQo+IGxpa2Ug Ikxhc3QgcG90ZW50aWFsbHkgcmVsYXRlZCB3b3JrIGNyZWF0aW9uOiIgLS0gYmVjYXVzZSB3aGF0 IHRoZQ0KPiAiYXV4IiB0aGluZyBpcyB0cnlpbmcgdG8gYWJzdHJhY3QgYXJlIHN0YWNrIHRyYWNl cyB0byB3b3JrIGNyZWF0aW9ucw0KPiB0aGF0IHRvb2sgYW4gYWRkcmVzcyB0aGF0IGlzIGNsb3Nl bHkgcmVsYXRlZC4gV2hldGhlciBvciBub3QgeW91IHdhbnQNCj4gdG8gY2FsbCBpdCAid29yayIg aXMgdXAgdG8geW91LCBidXQgdGhhdCdzIHRoZSBtb3N0IGdlbmVyaWMgdGVybSBJDQo+IGNvdWxk IHRoaW5rIG9mIHJpZ2h0IG5vdyAoYW55IGJldHRlciB0ZXJtcz8pLg0KPiANCg0KV29yayBpcyBn b29kLg0KDQo+IEFub3RoZXIgYXJndW1lbnQgZm9yIHRoaXMgY29uc29saWRhdGlvbiBpcyB0aGF0 IGl0J3MgaGlnaGx5IHVubGlrZWx5DQo+IHRoYXQgYXV4X3N0YWNrW2FdICYmIHRtcl9zdGFja1ti XSAmJiB3cV9zdGFja1tjXSwgYW5kIHlvdSBuZWVkIHRvDQo+IHByaW50IGFsbCB0aGUgc3RhY2tz LiBJZiB5b3UgYXJlIHdvcnJpZWQgd2UgbmVlZCBtb3JlIGF1eCBzdGFja3MsIGp1c3QNCj4gbWFr ZSB0aGUgYXJyYXkgc2l6ZSAzKyAoYnV0IEkgdGhpbmsgaXQncyBub3QgbmVjZXNzYXJ5KS4NCj4g DQoNCldlIGhvcGUgdGhhdCBuZXh0IHBhdGNoIGtlZXAgaXQgYXMgaXQgaXMgYXV4X3N0YWNrWzJd LCBpdCBtYXkgcmVjb3JkDQpjYWxsX3JjdSwgdGltZXIsIG9yIHdvcmtxdWV1ZS4gQmVjYXVzZSBz dHJ1Y3Qga2FzYW5fYWxsb2NfbWV0YSBpcyAxNg0KYnl0ZXMsIGl0IHdpbGwgaGF2ZSB0aGUgbWlu aW1hbCByZWR6b25lIHNpemUgYW5kIGdvb2QgYWxpZ25tZW50LCBsZXRzDQpnZXQgYmV0dGVyIG1l bW9yeSBjb25zdW1wdGlvbi4NCg0KDQpUaGFua3MgZm9yIHlvdXIgZ29vZCBzdWdnZXN0aW9uLg0K DQpXYWx0ZXINCg0KDQo+IFRoYW5rcywNCj4gLS0gTWFyY28NCg0K