From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755709AbcGHPaK (ORCPT ); Fri, 8 Jul 2016 11:30:10 -0400 Received: from mail-db5eur01on0138.outbound.protection.outlook.com ([104.47.2.138]:10695 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754983AbcGHPaB (ORCPT ); Fri, 8 Jul 2016 11:30:01 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH v5] mm, kasan: switch SLUB to stackdepot, enable memory quarantine for SLUB To: Alexander Potapenko References: <1466617421-58518-1-git-send-email-glider@google.com> <5772AAFB.1070907@virtuozzo.com> CC: Andrey Konovalov , Christoph Lameter , Dmitriy Vyukov , Andrew Morton , Steven Rostedt , Joonsoo Kim , Joonsoo Kim , Kostya Serebryany , Kuthonuzo Luruo , kasan-dev , Linux Memory Management List , LKML From: Andrey Ryabinin Message-ID: <577FC734.9000603@virtuozzo.com> Date: Fri, 8 Jul 2016 18:31:00 +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: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: DB5PR10CA0010.EURPRD10.PROD.OUTLOOK.COM (10.165.4.148) To DB6PR0801MB1303.eurprd08.prod.outlook.com (10.168.11.21) X-MS-Office365-Filtering-Correlation-Id: bd506b82-db22-4a87-fa20-08d3a744b7f5 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;2:kmodU/33fCWaOQxig49RvA5lV/5eHEBGELMgZFwNSyCXoavog1kKIUke0WrxNpE8AqF0sx5DmyOtuZjKthArTLu2rCpKhPE54RMzN3usH5JjlrrxmuObKA3zYZMXkZCahvN7PUm8v7ASxDOZXUWwg4Ig38CINSKub0HeL7weXlDkpsCiU5bSxk8xIIizOfV9;3:zryA9i6sGJO89APYs5Xi/KwW/uIvM0zDK3WSIKPfEbncgQm4T0EPaK4UWUWU5VYRAicXtAFFzB+MYc8f+iW5LXegeon2h8gD1gqmzakKk/Rha/kjAx0uC8xWO2TDrFAL X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1303; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;25:bJXERttWfGDt6yYdFNL71hleTpzUeU7OSEOgZZUBNv1samch1LzyE+vX6XYk7+NZGbm0Gc1Qh1FV0PZJWLr+iCtMvXSZRMBGE/TpLvqQvDLG0rPkJLjHmqhTTa1sJ+5xgDuazxWUlyuJaKyoP/TkyTB/3FL35jdoPV7pPouUy7wGh3tbQzHQ2u1HUv+EffmlBgUjbvIckmyQOSeSKWQ/fZAaAfYWUjFbhMS6bLVcm1q/CBoLMXiU8zABSqgankhf7Qf08PqsilmOsnIG/1LxJJNNm6l4UBnJ7jKcaFSxA4kXVa4XJ9qvLN4arAWoSmqS0DNBCS1xYwO30Ed/Gn9UVkHJ6+dxDedV5OCWKhKU4LIT/0XPhJqDIuRO7D/OuT0Ktb73xWq8e3iJL5ZKuBCEAB+NMtramKEt4z/MCA41IvcRqHrC1Nwius3AQ381hwvnrz8lyUra2dT6TiT3VyQWhzkXPn7iolJnqvzwU6InAUPfWDGKVpoXR3BMBCNZsL81g6BNfF+miiNsB/wmpN++sLgTO3+0/LTtADcyQKMyTLtJka+8ptYN4AYsMFQAzm/9hJ72xWH6qFnrTYlBCrRNTKxziosOtsMb4bJ+evzCsL6vDHTSS5qOWQV6Pdo70op3PB6YJZIq4MHXmbZ1zr1hq53gwCm6O9b0iI0B8b3VuFkXlaBvZXQIGNA4I4sjPHwN4fuNlqjhbz8HZdiqYII2wg==;31:AQfL9ioy5P7d4plM2lgEtVcUddtt9NWUadfdjQl/sn9BrCnZNZSH6GK5ziK/p0O9DCdjyXlaKAK75x2t2Kisgrpho0OQgpxUXliNFKJCOF5ogP9xq0f4nNZTeKE5DbN/Ipo7uYusSOzedkyM27+qoqmIFHrP0Z7WEe4WLZ/wF+SxCIsCxvSRGYO+9K3axx5x2lfEGFg1s/Jr1wQOf670jA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041072)(6043046);SRVR:DB6PR0801MB1303;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1303; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;4:hK4YLPPzMIZCbCddts1o9EOXSF+oKaSZJPlezvcghiAa0AZMmnL/ZSFGBIQFRFJaGVOsVNkM0IeP+4ZWtM73QKesjIoXEXT2tdnaBVfQUpwjp1T6MLI/G9J4U4MUJszue9ESSrBq0xtzy3gLLR/VFgIKJyEfeNwZYm/sr01d2ua/zsvkVGYGg7vlYZxEUmfiAn7biMQcyq30pn2TCQo6ldIuz5EfI1aHRTDot2cjAhKTYa0iA91WPl5qL6Z/fQLKvOT0iGp8BuArgkfewAWjD/WgjecfnKX7kUETHzTL7RiazugE+GZINu1JnstSu+Zjx+T7ZplkUeGoVaM6qocKXnqyoHY2bXhiqNTZRDLeIGlJnUBLrzq4cZR6IZ6yZs91s/O34hMaTcC1Jm9pdAtscwYUtkXrS5iBeY0P2dpyZMk= X-Forefront-PRVS: 0997523C40 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(199003)(189002)(24454002)(377454003)(47776003)(50986999)(76176999)(54356999)(65816999)(65956001)(87266999)(305945005)(19580405001)(19580395003)(7736002)(101416001)(7846002)(6116002)(65806001)(66066001)(81166006)(77096005)(80316001)(2950100001)(23676002)(83506001)(81156014)(33656002)(3846002)(586003)(4001350100001)(86362001)(97736004)(64126003)(68736007)(36756003)(50466002)(105586002)(106356001)(230700001)(8676002)(42186005)(2906002)(92566002)(110136002)(59896002)(4326007)(189998001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1303;H:[10.30.19.223];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjZQUjA4MDFNQjEzMDM7MjM6Mkg4UlVza3NEOXRxYU05ZS9VTDVTVVpW?= =?utf-8?B?VHpRRmUrRGpESVhqUHNlZGx4Y2ZBTUhENkNMeDVGVkNBYmlKWDdISjlXbFlW?= =?utf-8?B?aFdmUjh0bkJDSjc5WklWSk5mZ1JBTFMyS3l3ZjhHOWRBa2VGajFZT1J0c0Qz?= =?utf-8?B?cFpZVTdjTXQ3R3lnSmpVMmQ4T3pZbW9BMUEvUzdGckRiRDJmNEtRU2E4ZDBx?= =?utf-8?B?ekNFSDhRSTRndExma0hCTEd0VDJPTXA4Y2I3SWpMUmlRMUwvNmU2MXdWRVJ1?= =?utf-8?B?LytpRjNUSG1BaEt0TDYyS2N4WURjaG50N2toVGJaaTVWRWxLN1lVUGwyM3U0?= =?utf-8?B?L21hakhmaWhnRi9lVStPOU9NUWZXbDllOXl6VGZqZWdGT1U4MmpwcUVXZXpB?= =?utf-8?B?NUJjbFNwOHpIa1dpR1VKRk1VV2ZZNDVManU0ZE0rbXhVdk11TTVhOXRMQmZ3?= =?utf-8?B?RXVRQXFEbEZYekcrcGtmVkM0Z05PT3FSYjNWd2VKQTRaQkwvK1A5UjVJKzZT?= =?utf-8?B?WG5HS0pnWDhrNVQweWtTeTJ3VmMxWStaOXhqdjQxOGcyZTVtVXc0elg3RnF4?= =?utf-8?B?dlZjejI1TEtxSnI3ZlZicGl6dm9JOWJJZEVLcVk4TitYd3V2TjZjbGIrclph?= =?utf-8?B?Ujd6cDhSY0ZnL1duOTY4SFV1TWhIVXo1dG9Fa3FTVy9nTUFSVnV5dXBkQUxQ?= =?utf-8?B?WmxaQTU3NThSckFYSDNCUXpIWERTSWEwd2JjK29IOFRvZTd6MkdmdWdtQkdK?= =?utf-8?B?VUpOamN4RHlsL0xhbG4wQmk2K0tnQVF1N3BDQXBqSGhQZUJZOHRmeWdnVWtH?= =?utf-8?B?NmMweGwyT2ZhVC82MmZwZXpKb0plMnRud2c0aGMxZ2ZpL3BteFFNZGZoNjVi?= =?utf-8?B?ZWZ2aFpjWlFVUW90eTJ4djVUK0lzZEhJNjZPejkrYWZvd3orSHk2bGxqR2hW?= =?utf-8?B?UHF3VGZuelg2YmpJVXRsa1hXdm9vOVR5Z1NYTzd1NmhsZ0o4NU5qNzlaTmdN?= =?utf-8?B?cms4U3FtOGd3TzFzSXBHK2p5LzF0TTJqMG1ScUd4VmxpaWE0QWdGNEhHWTlm?= =?utf-8?B?V280Y09FNkVFUndjRmxKelFaUnhTSWhFMXV5ZU03cEJwbVZjYVIxcm4rQlRm?= =?utf-8?B?N1VhOCtNWEgrNU1nUkwyNXJGMStvcS9GbjBVRG9STzBlclczeXhQTzhjc0pQ?= =?utf-8?B?YWptelVCVTNOWjVGSTZuQXdiYkJlM0xWeU5zczdHVVhrRzNkMUY0eDMyY1ox?= =?utf-8?B?L3J0dHRRaHRrRGF3WTdxUFYwK2Jvdm1mZUtCRjBhd05Pazd2dm1NY1ZydktC?= =?utf-8?B?VXlkUk1aM0pFdDdCOVA0SlN4NUtoSWFiS3FWK2gvSEViWUJVeitTOVJJUTJm?= =?utf-8?B?S2VHcG5DK2Y0bklFRWV4TzdnKzJOVGxJTWc5VnkzVnh6RE5CVUJ3SlpreERo?= =?utf-8?B?aiszUis5UTZSN2ViMnZVQ05XOW1rdU1jQnNiV29TTXRrNTlOb1dhdDVXK0FD?= =?utf-8?B?bEZsaFVUTWwvbklCSnJEMUJteGdiaU11eFlDKyt2b2pIcUlYSndKbHVRaWxw?= =?utf-8?B?WGdYVk5KYnRuWkluQklDcWVWbE9hNE1VMTlBSElUOFc3R25JQi9kS25zMUlR?= =?utf-8?B?V0s2NlJGK3RBWlp4WUNsU0U4c3N2V3RJMDhDSm5VWU1RTDJ4VTEreFk2R1Ur?= =?utf-8?B?ZDZmbUw0U3hkY0IvOG5aZ0RhdkhMa3JtdjhYWVE1K1RJZ2RTQ0ZrZE05MTdq?= =?utf-8?B?QnMwak1nREdTMlFTRFhmbzlBPT0=?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;6:hxYYKWWe6SI5wsBxDUkkVCzCdFrrKwiPBKP+bK0dcZHnB3tWbC6hnhjefsaFnPpN1LVeJxEH6lARy80tmPB+AHhQ4xIaDx3DBsBQ+NFEx6cEXKjyzN0k4woJKzpxziwcXRehhi8a1jLr/JpMDR3U2lulh02LwPTkTTVwXLr9V4lTJ4RDdf9M9JoDp1sIzeUY/7gUAsnJ/oFi87RYqH6lan6+rKP0HVGCKeR3HQVLSyZ9GZH6X+9zCoqlUlN3kyGA8JZAm2mj2QNtOS9N60oBK4f558YBNc5ptm/gVW8lztrq/UeZsggvPnEos5i8L2Dn;5:5wa8BDWiBWo7BDl5dNXtzZ1tWI/pFHjo83/eOZE5sY1HF5EAgDc8TbujPipSSGBrEe2LlxR5mKejE69/UOZmCD2jwF1Ld5qc2/PNFAwSPiBgLMo2dxALwko4LrfrCxzllQ20y7fqUH96DMHpjGnMwg==;24:w7XdRlwd6M1ldm8ckfwM7jn7oFf8kTjkZTBxE+Gvo4Oi+NjiXiO16Puj7Cx8dlvgM3dQOtYeFpwWMpik8xCgrflGAv5+ssQgVF/VMs4dfRM=;7:XR1/DC/2mlbOzkVQftfAakf1dHyWhNIyZIH/HF3RRgrnr7jMqt2bU5i0SIlPdKqNy9ktCHf1Q+G8RUM0BegjcafZcV8TmiCT9IjW85ErxR66O3C0Xd8FdsnYzPc8Y/Jlsa9Tgtsa8AHVu5lL9bPx4lhmzIwffLvazdCgKc9X2gniez+CYRFqbOAfoVJw3YNx6asllYbxiYypi2wzhq6xwgHOjnLaJOQvBtaZ1mMw6w08gRz3uXidjfZ0gkx2DIK0 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1303;20:0R0L0VaGQG45hrxozTyN0YB0zyyKkCQYnBIovnbHZ2YNOFz2VkXC2uoz/HOIu5XXaRdmM6L3XxHOdZVtqLTHwhCKN4StXV26/xbRFI/C3+xHE7xajW62Lt2dOstrA75z8HzFAhsesfQYhqCJAXbdV81+mc0+yeUZ6pPDN/USIG0= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2016 15:29:56.5689 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1303 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/08/2016 01:36 PM, Alexander Potapenko wrote: > On Tue, Jun 28, 2016 at 6:51 PM, Andrey Ryabinin > wrote: >>> *flags |= SLAB_KASAN; >>> + >>> /* Add alloc meta. */ >>> cache->kasan_info.alloc_meta_offset = *size; >>> *size += sizeof(struct kasan_alloc_meta); >>> @@ -392,17 +387,35 @@ void kasan_cache_create(struct kmem_cache *cache, size_t *size, >>> cache->object_size < sizeof(struct kasan_free_meta)) { >>> cache->kasan_info.free_meta_offset = *size; >>> *size += sizeof(struct kasan_free_meta); >>> + } else { >>> + cache->kasan_info.free_meta_offset = 0; >> >> Why is that required now? > Because we want to store the free metadata in the object when it's possible. We did the before this patch. free_meta_offset is 0 by default, thus there was no need to nullify it here. But now this patch suddenly adds reset of free_meta_offset. So I'm asking why? Is free_meta_offset not 0 by default anymore? >>> >>> void kasan_kmalloc(struct kmem_cache *cache, const void *object, size_t size, >>> @@ -568,6 +573,9 @@ void kasan_kmalloc(struct kmem_cache *cache, const void *object, size_t size, >>> if (unlikely(object == NULL)) >>> return; >>> >>> + if (!(cache->flags & SLAB_KASAN)) >>> + return; >>> + >> >> This hunk is superfluous and wrong. > Can you please elaborate? > Do you mean we don't need to check for SLAB_KASAN here, or that we > don't need SLAB_KASAN at all? The former, we can poison/unpoison !SLAB_KASAN caches too. >>> } >>> >>> @@ -2772,12 +2788,22 @@ static __always_inline void slab_free(struct kmem_cache *s, struct page *page, >>> void *head, void *tail, int cnt, >>> unsigned long addr) >>> { >>> + void *free_head = head, *free_tail = tail; >>> + >>> + slab_free_freelist_hook(s, &free_head, &free_tail, &cnt); >>> + /* slab_free_freelist_hook() could have emptied the freelist. */ >>> + if (cnt == 0) >>> + return; >> >> I suppose that we can do something like following, instead of that mess in slab_free_freelist_hook() above >> >> slab_free_freelist_hook(s, &free_head, &free_tail); >> if (s->flags & SLAB_KASAN && s->flags & SLAB_DESTROY_BY_RCU) > Did you mean "&& !(s->flags & SLAB_DESTROY_BY_RCU)" ? Sure. >> return; > Yes, my code is overly complicated given that kasan_slab_free() should > actually return the same value for every element of the list. > (do you think it makes sense to check that?) IMO that's would be superfluous. > I can safely remove those freelist manipulations. >> >>