Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759770AbdCVQe5 (ORCPT ); Wed, 22 Mar 2017 12:34:57 -0400 Received: from mail-pf0-f179.google.com ([209.85.192.179]:35106 "EHLO mail-pf0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964849AbdCVQe0 (ORCPT ); Wed, 22 Mar 2017 12:34:26 -0400 MIME-Version: 1.0 In-Reply-To: <20170322160647.32032-1-aryabinin@virtuozzo.com> References: <20170322160647.32032-1-aryabinin@virtuozzo.com> From: Andrey Konovalov Date: Wed, 22 Mar 2017 17:34:24 +0100 Message-ID: Subject: Re: [PATCH] kasan: report only the first error To: Andrey Ryabinin Cc: Andrew Morton , Mark Rutland , Alexander Potapenko , Dmitry Vyukov , kasan-dev , Linux Memory Management List , LKML Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3793 Lines: 114 On Wed, Mar 22, 2017 at 5:06 PM, Andrey Ryabinin wrote: > Disable kasan after the first report. There are several reasons for this: > * Single bug quite often has multiple invalid memory accesses causing > storm in the dmesg. > * Write OOB access might corrupt metadata so the next report will print > bogus alloc/free stacktraces. > * Reports after the first easily could be not bugs by itself but just side > effects of the first one. > > Given that multiple reports only do harm, it makes sense to disable > kasan after the first one. Except for the tests in lib/test_kasan.c > as we obviously want to see all reports from test. Hi Andrey, Could you make it configurable via CONFIG_KASAN_SOMETHING (which can default to showing only the first report)? I sometimes use KASAN to see what bad accesses a particular bug causes, and seeing all of them (even knowing that they may be corrupt/induced) helps a lot. Thanks! > > Signed-off-by: Andrey Ryabinin > --- > lib/test_kasan.c | 9 +++++++++ > mm/kasan/report.c | 7 +++++++ > 2 files changed, 16 insertions(+) > > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index 0b1d314..5112663 100644 > --- a/lib/test_kasan.c > +++ b/lib/test_kasan.c > @@ -11,6 +11,7 @@ > > #define pr_fmt(fmt) "kasan test: %s " fmt, __func__ > > +#include > #include > #include > #include > @@ -21,6 +22,8 @@ > #include > #include > > +extern atomic_t kasan_report_count; > + > /* > * Note: test functions are marked noinline so that their names appear in > * reports. > @@ -474,6 +477,9 @@ static noinline void __init use_after_scope_test(void) > > static int __init kmalloc_tests_init(void) > { > + /* Rise reports limit high enough to see all the following bugs */ > + atomic_set(&kasan_report_count, 100); > + > kmalloc_oob_right(); > kmalloc_oob_left(); > kmalloc_node_oob_right(); > @@ -499,6 +505,9 @@ static int __init kmalloc_tests_init(void) > ksize_unpoisons_memory(); > copy_user_test(); > use_after_scope_test(); > + > + /* kasan is unreliable now, disable reports */ > + atomic_set(&kasan_report_count, 0); > return -EAGAIN; > } > > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > index 718a10a..7eab229 100644 > --- a/mm/kasan/report.c > +++ b/mm/kasan/report.c > @@ -13,6 +13,7 @@ > * > */ > > +#include > #include > #include > #include > @@ -354,6 +355,9 @@ static void kasan_report_error(struct kasan_access_info *info) > kasan_end_report(&flags); > } > > +atomic_t kasan_report_count = ATOMIC_INIT(1); > +EXPORT_SYMBOL_GPL(kasan_report_count); > + > void kasan_report(unsigned long addr, size_t size, > bool is_write, unsigned long ip) > { > @@ -362,6 +366,9 @@ void kasan_report(unsigned long addr, size_t size, > if (likely(!kasan_report_enabled())) > return; > > + if (atomic_dec_if_positive(&kasan_report_count) < 0) > + return; > + > disable_trace_on_warning(); > > info.access_addr = (void *)addr; > -- > 2.10.2 > > -- > You received this message because you are subscribed to the Google Groups "kasan-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kasan-dev+unsubscribe@googlegroups.com. > To post to this group, send email to kasan-dev@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/kasan-dev/20170322160647.32032-1-aryabinin%40virtuozzo.com. > For more options, visit https://groups.google.com/d/optout.