From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966871AbcHBPIN (ORCPT ); Tue, 2 Aug 2016 11:08:13 -0400 Received: from mail-ve1eur01on0136.outbound.protection.outlook.com ([104.47.1.136]:25986 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S935003AbcHBMf1 (ORCPT ); Tue, 2 Aug 2016 08:35:27 -0400 X-Greylist: delayed 7217 seconds by postgrey-1.27 at vger.kernel.org; Tue, 02 Aug 2016 08:35:26 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH] kasan: avoid overflowing quarantine size on low memory systems To: Alexander Potapenko , , , , , , , , , References: <1470063563-96266-1-git-send-email-glider@google.com> CC: , , From: Andrey Ryabinin Message-ID: <57A06F23.9080804@virtuozzo.com> Date: Tue, 2 Aug 2016 13:00:03 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 In-Reply-To: <1470063563-96266-1-git-send-email-glider@google.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: VI1PR07CA0081.eurprd07.prod.outlook.com (10.164.94.177) To DB6PR0802MB2550.eurprd08.prod.outlook.com (10.172.251.148) X-MS-Office365-Filtering-Correlation-Id: 5b3b35a5-7982-4772-11f1-08d3babb9c1b X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2550;2:lYsQp8dlJNGGIbOTHJnjqVlgKIj6HIGGTbHomJEHC9496qBy03El0Sf/awTcedWfZhAunLrfayxa0+SAQK7moJy5X364uIj/A5e20hYXyuLQbcTyoRMNbl/LwZNP22zVGgRmki533N2lImKsdeYrfh2edXO2K35u222jBVshI+6UnUdO63FDuWAUNv99XvmA;3:NxzNommGN1WYkpQPERRLjZrwk4ejlB87QujuO71mNKswYN+dPS+Q9QLCTTw3vcPyV8kM6KMhBx0aZPo+fge7/7uvpGj0fKfKzTu7vNZxVEH6LWX+umul0aXz+h5FQqgb;25:0mxUeNf11frquN1+MSINdX741Gk3lDoQvU1U4LpywTLDGDPzI6PtdYJybw1KcWuo8EsPoIBJDyQvkMEnBPMcGdib3zHvFH4ypaWj9Z7rUna/rc1sJ6UnMMAYveY7hoAwTl9CkDlAQ3PTxYaKGHj5wBh5GwP/eRNReI7KFVzNzzi0/gXCAblvuZOxjD39s6u9NKliUPOeQXF1bFT5I2VWG0A3vL+fNf2/z1U2LeUax7z2+Dko7o+rADgi1DjQmJdFs/FTztThYanwCfK2Bj6kAQT83U1v/Kfyzop+PUz54at3Hlh17gCF24IV/oyiLTAn3Ymbr1GGGycc+Htm7P1YdmTKxlZ3auaWBM/7Eq6wDKJnyusQOZveFlSjwatIAs9ZvURn/OtyK5bflm1d5M3Ckg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0802MB2550; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2550;31:+tgDNrRZWHFDEgoI0miMTPls3QwfjkmXp4Ca0Tih1vV8UpSXsC5KnnyfRPRNpNlPvHbeGdLyDhs0ELiaYLirBfkMqmpaWQR8quNrcOVRcWjaGMLyqwHME/o9xsJnGG8cFeFw3GV6ytrvgerkebz+eCc5a9Rf8HqUKblrHxUvjiRouFov7tB40VLk3MWMqX+UtUPlVJBKaFSBrZXm7/0vLom+G71nZuZomVRGHVQxzO4=;4:IDwFWT2P6RmYN0EVHHfkxFSJ1PMrxFv0YQzOsqZ5C/WPx44jrYXNIlewnKGapm1jpiCuRuISBP2GDICTCJ+Y67QIv/9nlYB9RK0o50/ELthxIwJVjjjd1ohe22keHaf6NpRO1uERXiTpH0XSvO5i8GTFo8g6KuKa2IQSCeCDqL+eb2A6Ow66pJivB/ZOdvEPlCU9RL+p/O1HErhb+1s80ruBBoJrtXQ3jbpgPjy5B7cKLe5xelkZP6tx16oitIFNSbo0rde9QkFgh/41HE3S0SUYiv1VlekC9D6dyiWxo1x7zvdQwHL/015dbkwiGEoEi+Wzj24tq1ZbhrIjCDI0bYLbqoFFb4Ll9On5YZ+LEEHWKLV40CryiFhUps1nOUWmwMawgHJ4jxFRQGhfoyJ70O10jNO9fQEEM/LqjQo8FEQmICjtZHvieWqXkKbSG68EKMxPyq96rmHDYgqpkcoJuw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(211936372134217); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041072)(6043046);SRVR:DB6PR0802MB2550;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0802MB2550; X-Forefront-PRVS: 0022134A87 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(199003)(189002)(24454002)(377454003)(4001350100001)(7846002)(305945005)(7736002)(54356999)(3846002)(6116002)(42186005)(7416002)(230700001)(105586002)(4326007)(87266999)(189998001)(586003)(2906002)(76176999)(65816999)(36756003)(50986999)(47776003)(81156014)(33656002)(86362001)(59896002)(66066001)(77096005)(2201001)(80316001)(81166006)(8676002)(101416001)(92566002)(68736007)(97736004)(106356001)(23746002)(65806001)(65956001)(83506001)(19580395003)(19580405001)(64126003)(2950100001)(5001770100001)(50466002)(921003)(1121003);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0802MB2550;H:[10.30.19.223];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB6PR0802MB2550;23:VhWC+HROp5bznNnf3wWKMUkDs7PrWl1y0HU?= =?Windows-1252?Q?qpiziMBz6jmcQ0qUVFKUeq//vhzV2TGIh8xFTvVyyP9E/EvaJFODdVhE?= =?Windows-1252?Q?Xd3zVgka4hYDvefDPtGCTRS/rEN1LMUpo8VPxAJOmFT7r89ytxu13G78?= =?Windows-1252?Q?zeIbKUdZ9jgnokRrvscS1xolsiuvbTkpF90u5GrUF0zt+w7mYz2GjJQn?= =?Windows-1252?Q?q+5LPff8xaLRbxQQMI1kdhyp91cxfiuf6yLS4QgtjT0GR70R8LaBCSZb?= =?Windows-1252?Q?DmVG+xpvGeDFOHQGcCXZ5RP9eWWxUISzSasS9qwzeUsTKxA64SsKxUAS?= =?Windows-1252?Q?2XqDCVOWu5QDPSg2GE+ZKIoGP6+o5zqSFXfiWl6BcUjqdmyjmsXEYjVp?= =?Windows-1252?Q?SIaJXWsmmFuZXjoplhTuAYx7n8mQjrLUeen4h4sf1oh3jAa7QIKCNgIL?= =?Windows-1252?Q?u23MggXX1DHBnHVlXxbId8AR19CthLZqyUOmTtj0WGgKPJHj/IaMCIdQ?= =?Windows-1252?Q?BanaFZv/KRajSfqQZJe9TYI46btg40p2m2z6ilhLB+2ijfXb1LNbvwqc?= =?Windows-1252?Q?zFt3WOOJeAgHrZvsQx5HnRdv1ZGOj61gunPvXkdt9N4XORIhr9e1uAt2?= =?Windows-1252?Q?B6WwA27Ide3fXfFHwyFmw1YcHfnT9KdFVQu1SHnr1+AfxzmDp6Kr12je?= =?Windows-1252?Q?nD2/M99jdMRwLDz7WGvXItuSC8b8uCkxNkVgVi+JklMrmCh1f6qtg2fy?= =?Windows-1252?Q?X38T8ll0dWD6551I78/U7dJquWVSsd2nFbsBGaV2Sql/wZ47iWGm4hR6?= =?Windows-1252?Q?ShebOHO17bTaClWP+fH4yevXxKImaNxyLrWjSHYi1NBZ9FHy8MvT+jAw?= =?Windows-1252?Q?Lti28u6AYb9JCQEvRy11H3WrOn+zCBfo3gteEImf0OOWo2sc6O+NAmyC?= =?Windows-1252?Q?nF8ySsAeyWeX30dPUY3ZXR9aBYOGygbZxe3JaQd5UyQZ4K64U69DK2Gm?= =?Windows-1252?Q?I8PkZwAzjdiSIfhNiV37Q/M9ZnJ6jGceP63PZqdE8Dyx9sThXqQpBmet?= =?Windows-1252?Q?ONsUccfKUuavOYJKAj1rBl7o6menXP/V24G3iG8ZKgjSyd4IFY3LboCc?= =?Windows-1252?Q?yhWE3ybpd/dLizmZXYiXwiUZEekgBtzvaiGbFsqJTcnkG+PFKhi/ZkVJ?= =?Windows-1252?Q?fX5ma2nDB8svGVQopzV/+B+2oVWXBFqQXQ3L1Druse8eSYljXQF2koGg?= =?Windows-1252?Q?xrfkU1Eaf62fF2a9HbTrX8no7lVJ9mI6OdPKor59RxSOcDnEOBIP5E5M?= =?Windows-1252?Q?BuzLO5PXCUWgv6+LLe1fCnnxJFyUFvLaEQ/KgsBm0lpz2O5Aq+RmAh0K?= =?Windows-1252?Q?50KZzDzsC3ZHEjbUgUATW5txmfpENwPvt1XcSemTdDH+8wDcqwNezJ5C?= =?Windows-1252?Q?MCZBMN0qJMQueg6xrILv+pF4fH1c+0QgMRD8qI47ygWbt79EtEmOxE92?= =?Windows-1252?Q?U4Jed4do=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2550;6:ekhI/3CaeNpMglMjngJ9MGuZqJTIw+GGFYTSNqGA8uQqZgs0QgydP1AEPy+hTB/vt+6uLoYhG4XVHXSYZ85WdFRjJ0L9J5EAN1lBTCMX2XLIJcSdCgcg2/IVlw64BJK82GNfGVMjg7uIwbNV9ziRCyin/f8j/rHJt8dI25XXcWPnUK6Iomv9hKE3BwL5dmL8aKZwBLcYlnHgtWKgit1LCSWdWRJoKMotIUbJ8xHwzmlc62PjRB84CSFpnroAyJFNn87LPU2U4Ew2mBWO8V1U3hFHFlyEdRQtJMJzfknJ/LHE2D9LxWp7ZYUO2khDX3or;5:TN27G0hDdqQKk1yBAtQE+oXMvC0Q+oHZGGAo0Zj6L+wvbX1PAi+QJV25C4kA0MCEnmNsgsZdVFqP/G0wqCzE+cRrLnw2XwkG0QWDekqoNPpWcajxy3eq2aeo5DCQnJodDjS/EEQ2GIhWP1STcFUygA==;24:T5kRUvur7RaoqUI/u03A6YbxnnA9iELP56+k/AbU2sMNURKdFnrAwxq0wD7KChn5nFh2DrbIu0Fm2R4mCYfiErVx6Bqwu6hWhbKblXPLU+M=;7:UVgcmG0+9/MYYU13Rvc2I7QtQ5tIQiwJPWYZw+JxyVm45FJxsLdxo1tXVB8Iifn/6eu2FnYnJTtpT4vNT58S2/8T2p45WtiCYfw02+l42aabDISABYshwLoIJB0ems8WQiZamqPseuUSWSD8Hn/owgAf/dG0JVyMDBIVt5KFGzrgDtzftFG/KgVdKpDlXB5KpTIj6ozNz5GYkYkC2azg27hvEXT600Fl++ovpNhLGFHAqThVLbc/f1HSjRZOBm5l SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0802MB2550;20:NnfBarO7/OAZV+tmVl4YwhE675+N9IBZxM7i61S5Vj+XOzYClsiyY5JrEzUiafHhQjC5AUDhFp3xgOK61H5TvTk67fcQDFe+sIREswQnIJhUTw0hXcX9Rt0YaYFfw/6N+CJXBLxrWtY1vn29O6vchYjqrHVtLf1PmwifYokfXT8= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Aug 2016 09:58:51.3158 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2550 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/01/2016 05:59 PM, Alexander Potapenko wrote: > If the total amount of memory assigned to quarantine is less than the > amount of memory assigned to per-cpu quarantines, |new_quarantine_size| > may overflow. Instead, set it to zero. > Just curious, how did find this? Overflow is possible if system has more than 32 cpus per GB of memory. AFIAK this quite unusual. > Reported-by: Dmitry Vyukov > Fixes: 55834c59098d ("mm: kasan: initial memory quarantine > implementation") > Signed-off-by: Alexander Potapenko > --- > mm/kasan/quarantine.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c > index 65793f1..416d3b0 100644 > --- a/mm/kasan/quarantine.c > +++ b/mm/kasan/quarantine.c > @@ -196,7 +196,7 @@ void quarantine_put(struct kasan_free_meta *info, struct kmem_cache *cache) > > void quarantine_reduce(void) > { > - size_t new_quarantine_size; > + size_t new_quarantine_size, percpu_quarantines; > unsigned long flags; > struct qlist_head to_free = QLIST_INIT; > size_t size_to_free = 0; > @@ -214,7 +214,15 @@ void quarantine_reduce(void) > */ > new_quarantine_size = (READ_ONCE(totalram_pages) << PAGE_SHIFT) / > QUARANTINE_FRACTION; > - new_quarantine_size -= QUARANTINE_PERCPU_SIZE * num_online_cpus(); > + percpu_quarantines = QUARANTINE_PERCPU_SIZE * num_online_cpus(); > + if (new_quarantine_size < percpu_quarantines) { > + WARN_ONCE(1, > + "Too little memory, disabling global KASAN quarantine.\n", > + ); Why WARN? I'd suggest pr_warn_once(); > + new_quarantine_size = 0; > + } else { > + new_quarantine_size -= percpu_quarantines; > + } > WRITE_ONCE(quarantine_size, new_quarantine_size); > > last = global_quarantine.head; >