Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760600AbdCVQHs (ORCPT ); Wed, 22 Mar 2017 12:07:48 -0400 Received: from mail-eopbgr30123.outbound.protection.outlook.com ([40.107.3.123]:64672 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1760438AbdCVQHX (ORCPT ); Wed, 22 Mar 2017 12:07:23 -0400 Authentication-Results: linux-foundation.org; dkim=none (message not signed) header.d=none;linux-foundation.org; dmarc=none action=none header.from=virtuozzo.com; From: Andrey Ryabinin To: Andrew Morton CC: Mark Rutland , Alexander Potapenko , Dmitry Vyukov , , , , Andrey Ryabinin Subject: [PATCH] kasan: report only the first error Date: Wed, 22 Mar 2017 19:06:47 +0300 Message-ID: <20170322160647.32032-1-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.10.2 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0007.EURPRD10.PROD.OUTLOOK.COM (10.171.79.17) To DB6PR0801MB2053.eurprd08.prod.outlook.com (10.168.86.22) X-MS-Office365-Filtering-Correlation-Id: 987957f2-f363-41b5-7626-08d4713d8493 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB6PR0801MB2053; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB2053;3:e1dk0p4t4scGdiybTrSBpwkH7KftdC4ev8UVy6j6biN9DcdmLThhaQ8+xab0KFTSduYMRhQnA5zdIaKTe6/F3KZOrOjQBrUgBk1C1Xkpsp75OdFfGwb54c43uHOoZEftDDww09pCKScJMFezpO7KolCyc4zzR1hcy5MnUGwwQL/a4miy7QfGUyLbHvBeZmbaPyD/vBaRpMxQGUg40M5tAFdPI0CzMuSxTS6gkS+bS8mbfpG57TtqnQzlK4cOsQfSn6ZXdSslnkaTZWEhsNasRg==;25:U/Gg8S+o3ruWedw3zqU7GsfV1dQvlzEE4kkcBtcPoV2NPggRJxk2KObzEJc7AXlzno3jAvTWHeWZkqnRzw9fsprQQZz8rrXuHtJ++47W4/B4RPLdY9b14m1iP0De8LvlYBPscWKpYwrsAk9AlMfAtrE5piPr0ZlTjBsEoBzIxWYAPDSyPjImzTrYMM0jUdC7MTPIH3l+xsSPyggKDaRezcD495AZ0J6ognRZN3i+wwu2pAKusZ45ggZ8PRPn1lGUnajoOXMkMHwURSn6zBoXzD4x4wBxqywfNyP8UHQMoDPh+xLMEpXRWryNRat16nMlSfMBnp+0lviH61P9e5TRtm0pu1FO0rLGOiQWQgHTib5OugUjkbUE6J9SnDoWhmRXJwgI0HFfp1VF6snQ+znG4ghwQig/kcq0fifYi8bzTwDmjbNgdz++aRi7yxKJ8AgyvsnQQSHAsdsVxJJX4Q+OMQ== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB2053;31:xq7dPD4Rc8mQV0671FK8wrvwA8yde5MqniYo6+x9N4c4qEiE3XiXIqQw/I3E6E2rFvtiwp/lX2Ug6mkCT0nA12Ji1FXrpLhedQwxnxImu2UdKpGzPFYhU5/EMwBoYYB3PrKbsPK5b77/4RRP9sD7HB3D8ZVmn74sdI1Fk5U3FM+ol31Ix1Ib2Q+EsZ3ustYg+YLFbLVGCT697okxJ1INCfVh0W7rNCi5WIhCzEomMaqPIfAP8g/TUV8C1lBfzOFQ;20:W4WwA//bz0hyAvGY2NiWmXVW4cIJOCNsqwM33NpvVZswAWeXXaJpwrDotqjByg9A36R1em63J+h7DsqafdqrX+F+L5NBjhl2vvM8nF+DifypwH2VaCAbrk29EJ8WScRDTkZOvVNSmkEPBcnBtfn/7ErU5iOlR/YghC6IP64kImSYBO5CnFSS3HFiZtuc9/g4YKj9Es5TJxOUrrBs1zXJOntsRJ6tlTHnHXX3AVWqw68GM3oEBFrfqPAb/ecn8MsL8dU+2403k1Q+0yQd7wJGaImnuPp18KQo3ggsPFQa/kHedA4LIokcxKJ5nQVYSotG5xDQ1OJ2a8aUmjMwk22NrQ+KJBKBw5x67Q5s4YSzWt6iOQyxQuHRQcNZ5E0KNG6HQbxLxXPDZYv1tm7cMqilT+/KKZClBmtXYO8l9IOBuMY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(20161123558025)(6072148);SRVR:DB6PR0801MB2053;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB2053; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB2053;4:9pCrGKfPbVi5XbRcDNpPacMw7WJrTSqEBjarAHiAjY1t05uXkPHjP5L/RCu85BS+fpqx6h8ldOF6H+wxhbf4I38iAT5nulI4mz0QOHUF+UKmLpA+WdsyS7XyhbZdsZWYu+bujW7mmjoIHrZUGOWmfTNSC4iChyn+Au9OYp+CDmDKURlC192/R2XtyCIo1ESgKgYGq63fLPrFQ6vZN2OjE0tiChfieKTOXg44LAd+m0eubP3MJRGGhR3uqJWtDXdLNanZg2oP1u0q+XXRmwvB1ZEm4D3uHXJwRhIPS6o8eDEBhkqCY0sn9Q9k1OeCAK9dGHygY33fW1xAiwIAKphGhFl2CLWuOioeWta0EnNyDM3byC3k3LfGDN2NwyYo4d2yI/N2uAlh5bP4qoflp6bePWqrFEmoSiXMYfMettuXZverazHGx+Wo4nM41ltuvmIDa391CN2tqRPBXkJHHfyJCSZELepZ1HKJuO8MD+uj2wX+t0FQuIagL9HTt9W5eDpWpDF9vA6E9oUQbWWPoYmgzOMDghBZFpLvegWjWcPpX7RwUYYAfxbUiyxqahX9MZtNJUiWMvxBkUTgPZay2EAMg7Z+CdGKDWXDvgtycc78+zSurHdc6piF5qIFAtwbS1EKYsk92V4UMZPkLrRHdl563g== X-Forefront-PRVS: 02543CD7CD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6069001)(39410400002)(39450400003)(39830400002)(6486002)(38730400002)(53416004)(6666003)(107886003)(42186005)(66066001)(53936002)(6916009)(50466002)(8676002)(25786009)(86362001)(36756003)(110136004)(189998001)(33646002)(48376002)(6506006)(4326008)(81166006)(5660300001)(50226002)(6512007)(76506005)(47776003)(3846002)(54906002)(6116002)(2906002)(50986999)(305945005)(5003940100001)(7736002)(1076002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB2053;H:localhost.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0801MB2053;23:EeD2AfMqeU2++xO16PHY/6voIBdlIGQS/g/mhVs?= =?us-ascii?Q?VNIASEHfO+Bh+RUIu535doFbwjO6X7/9MOfDGs6Clb+BkDmfKtaaCN6XTa2R?= =?us-ascii?Q?oIDGrgEO5+14vv4UPx/cqa88/h23ymdBakqmvQ+Qai/OlOhI0VBOFGBuKcY2?= =?us-ascii?Q?GBFC0YTLh6WxR6w+p8ijmILJIfbcvZhAvmNoVcn3tsd5dpdLiiT/Poq9XFc4?= =?us-ascii?Q?LL3u3mHqXY3ahu1Q5swVD1gEuzWoCdPDKcy4lWEwGuTqgARSnLVwBWz+HJyc?= =?us-ascii?Q?n3DWnXi080X97fIuAF3GYylmkcF6cDpZGir58CA6s5U+xLwWilhTJlBHSO+i?= =?us-ascii?Q?ci8NRNlhSybdnZunIWKD9KXl7HxBcukNrOPKiTlzUn8XBybJKizJKrEdy82W?= =?us-ascii?Q?nmUptuvpskO0/0t7KXn3OJPHFULRmXlDMd6ec/0BMM1F+5H5KHxei/7aBN58?= =?us-ascii?Q?CPbXL6GmOvbN3ffoCRFKflImVt2SdGZfoPv86IKrVmrPD3IPizQvV2sAshaQ?= =?us-ascii?Q?0hEaI0JxeKkWLb2nlC2FluWkwtBkHBbBWqDPX39zu3lhiTDvXlhnu9zVLKWy?= =?us-ascii?Q?TZsYRMVDCqqpPEq4CUAb/WCrI1NvkCSVH1ugdvD5LflMRCwJVxh5+hTDKO2c?= =?us-ascii?Q?rMLA94/4wUlNawesXozjcB65mF9k1NV3BqE5oH7h3R18qf6dEMVUlBxecccv?= =?us-ascii?Q?baLYk2CTVvEQKuuAjh+RKzxCu9HL1Bv1aTdr1+FMHVE0Z0QX5CVqvYhBXwEY?= =?us-ascii?Q?tHP5Vmc4ohd6d3RXdHqeGjx4WSX/S5vjz4ZrZbn9U+lF5V7JiNM8JEmyfZ/W?= =?us-ascii?Q?NGJLDvCbjPTCkQwhPkQ4QHIo9JbmaZsJJc7jb1Ak7oCRpvdqXLKO/9xiMyh4?= =?us-ascii?Q?bdtxz8DtLuXVHbtFBPhYKsH7/By86aRNDuqbeq35yd1WkJ+73jof2UXWX36T?= =?us-ascii?Q?Wq3AqpV0Ela2p1OA9uGOL+p6zZVg+oHQgclq46uaIzpOPkX4kcC/qK3DqwNy?= =?us-ascii?Q?B3gjR8ahKJLDC29RiTNVywJYypDV4i1E3cppBFvNJ/00H0g=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB2053;6:CO3f0FfiY+oFfF7DJ9HJ0w6riXpEW8z6j0WApf9pTL+GvqHUe/JdswAiWxuBZ8JcU1/P1sTCVnzSkxT6dNgG6xFUkLQjqX6SsQXacAY8qjQPnrzVcZ6aMstRn7Uk+1fDy1gIk2ZwCAQFkppx4WReys198/YMb5Mm1QxGyHf5pzfSS4ytxBET5CiC/fLXU1tRlL5+RP3on+vA774YcZJcM2uQ3NFl3rz4QBJVdVO1j2g610R0q81p7twcauKab/Wlh1P6kL+v43hwDp1GUCDL3e9ph564rvmwOzRMf8lb+Tk+09TYVyq0AtI5vvSxDdf3qSXYhEW/Ux89PwL55IbG7SkvcpvlobSYJBRCwaw0D5xhFftsWOUF50Q8e1cpbEcNlH/8KK9SupveRP4QMhp4Lg==;5:6jBA2YzOiiUo2S1rZRLFi2R/GySvYF197zgjnTe7LIcPGxVJjpzzrT0GXdeQMVm8/BkVkaehCDbiya9QebUar5upuhe537khWpUJ8VUhz9LY5tcGv64ia22GexEtalPGaBbIzGjjxtg3GuFA2UQ9gg==;24:ap8ZJajtwzal+jTEQNoyqL7xw9b9qAB3bYF8BWBEsp7K9Rroh+tGSpMBoIuqI6siQn3ivdKMZKhoOI5hxb2K6e2IQmZYDXAKQk19GXrr08M= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB2053;7:zHhuMMdyKr1PI/4SNt96xO0KUphOpkSc6nJTYEU86V32IAvAt2plnYY/X/QQ7IRuiOOx8ZlMqH++xDBooFL/JhIE7rAkPBWCbN6YfmP89/ylbdHxiogDQcHF1LY2RZX1SS0oOr0DV58g24pha5GTYTqhDQF8UmvL5b6apegPplfGEcjn1hQEczRBnAOVu2EAE0jllX8B9KTDH12nMx1z2/F5ESOU43HhHeBMTppvV9ROHZrjhsTdpELndhy+frZdO0hWxjNveEJirL6m/7RCG0lXMZ7W5ujnSJFD0dyoLShjKTCYGUkxu6ISDD1OFpVblJNPb8Gn717PSQsnbUJYdQ==;20:7ovXCSNHLXSdDW8n+pkuqIlpw7z6+a6IMlMi3W4BbqkgxQBycYaxNb0r6CxHgXSR93bk13ZgLJIdHNT6JbSjNFKgLSREE9SkVVPYPNo2BjHX/0ZdAYPNGrkuuZ4llwsS5Ax2cuGhSmcFP2Spc8bFkrU50ift7PmZ0r5HF3tSu0M= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2017 16:07:19.1007 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB2053 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2627 Lines: 93 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. 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