From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753379AbcFOREW (ORCPT ); Wed, 15 Jun 2016 13:04:22 -0400 Received: from mail-db3on0126.outbound.protection.outlook.com ([157.55.234.126]:6108 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751739AbcFOREU (ORCPT ); Wed, 15 Jun 2016 13:04:20 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH v3] mm, kasan: switch SLUB to stackdepot, enable memory quarantine for SLUB To: Alexander Potapenko , , , , , , , , , References: <1466004364-57279-1-git-send-email-glider@google.com> CC: , , From: Andrey Ryabinin Message-ID: <5761873A.2020104@virtuozzo.com> Date: Wed, 15 Jun 2016 19:50:02 +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: <1466004364-57279-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: DB5PR06CA0039.eurprd06.prod.outlook.com (10.162.165.49) To HE1PR0801MB1306.eurprd08.prod.outlook.com (10.167.247.148) X-MS-Office365-Filtering-Correlation-Id: 8d6e3a6e-e94a-4a9b-d7a5-08d3953cfb39 X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1306;2:BwGsDHyDj2VhKgJlhgV2p6h8aAw68vcFH4D5tjU59tYN44XQ2EwRZPocANSZ8eEhs7LKm3D3riq2+3hDbno1525JGr/4IIIzTR+KvhmRWp0LRhhlbkWoHrb6aSkLLKqCoQee1MrBILfARoGBC702St9LPE0uNRSLgdY0xBImt90MdMGrF2Jach0qY6TsrotW;3:K3DhCiIjbJGFA+x+7OFzGCIHYGYhHuSzHxPWxp0vIwAoksHqjeRa5mrOmpbTdXPqoreJtxpw7esjgxUTPoWS53Yv+OvdTfxoBw1HuMmPV1ofgBiRXasd6MYu7daOOWLu X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1306; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1306;25:mKrOBVkVMEFzjK4wlhcaehp/QW0Tg0kUVvjdS6f9t9oyshfS4I5QF8sB13SXOAs/UlvOtakdW9PCWmoVn71mNlf4tYV5+ZpBE0SNjtN6PtcaGrITYk39agLQZRoxdVCpXEpJ3QNLFqQhUWPWTpnuyZFWNGUGUDHxFiMCTbLgBLq/HYNKAnvmWp/9azAJSILhnUa0lKkJ9BFdkaHbljlNkBn7dLVFM37fpq6ASsIctqtY6thJgW7v4OPfM5KWNaYuIqPO99olgrKhzNs92GWvBGiZpnbztbWaqn2U4U8EH6SmpCBRQsE/X2+t6hjA7LmvC0olgfGDMWg73wdsQIOwGAjPM7X52165GRTGeTNChPMDh/gaceQztNu0qy2Nr5DB6wMxtDpKfAn+7dhnqEOk5B024xXl6cvUYDPbVikgF9CXB5BK96sDrzeWwYRaO4gC7E+z0AWylYmtNmCeb3TQiyzBsOSlGqvvi2fE8da/hxamWQ2BC4JCUxjYatCo98bfjnxCbCfiWDztCZXop9ST/ISijB9shhC7/eRDMAwnH5+iBvKDuYMU702k+f50WHSlBN8ZRkBjBJUB7UgcCBQoCvDc6/eL1dxgurv867JOLTGCB2JabsvW5onhn/SSXhCMmtO0D9GLLtqQ+0ozodaBtCkJZFhJXVQojCZnWS2kZe6dOTaRmbCqTLEYYAEOi/5kZIvb9j6s68UomIBhjO/DRIICrwy4lY9D9ks98KvkHyE= 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:HE1PR0801MB1306;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1306; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1306;4:BRXedCrOFT4YfV8yhfO5gfTRHk7j1+CfkjaPVxpVMxgdU1LRihiwli4yFCbAMv9MmMdwTtZ9BBZuYGtSVJ2bBYJVGft7VPfJxppZuGoyTF50gT9FdAOnF14zo6cRH9q7wn6RXBvMuMonx0jiWHpL5ci9UIfC/dSu0bRXF6TzEAfp2wuwdkZdE+M95T5RPUMh/A+OK3pDGEMjscXYyp5bANg1dQQoRM3lPr0HqingbcfM11KpgH33mAIB8u5sTixlQXLfiS5hYEKX7Agahdn/75fm5W//OJ5K0yyu149ceny4H3YPfcNARIiKjvV5BJRE4uPK7bRUuOLvEKxP+O0JRjheR0a84Dg58UYP964YsYzZYBRN/TlWyadSTJc0i1js72gdCCC3TCpLKsUKualhVNJqzvUmMGCOt7ZPET4fQa7tBMgwk2DZXYpEVGnofaVvCPRYgCqvAZkf5dEh/V5N/g== X-Forefront-PRVS: 09749A275C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(199003)(24454002)(189002)(377454003)(50466002)(586003)(3846002)(6116002)(59896002)(101416001)(23746002)(64126003)(36756003)(99136001)(19580405001)(19580395003)(92566002)(68736007)(33656002)(230700001)(80316001)(65956001)(189998001)(66066001)(65806001)(105586002)(83506001)(4001350100001)(2950100001)(77096005)(47776003)(87266999)(65816999)(97736004)(5001770100001)(76176999)(54356999)(106356001)(50986999)(2201001)(42186005)(86362001)(5008740100001)(5004730100002)(2906002)(81166006)(8676002)(4326007)(81156014)(921003)(1121003)(83996005)(2101003);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1306;H:[10.30.19.223];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;CAT:NONE;LANG:en;CAT:NONE; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;HE1PR0801MB1306;23:ooHAtRg1yAFp0P5AjH1ArhauWBVozHM++iY?= =?Windows-1252?Q?GiEhV+fg/R81KCGL7K7lqek8Dtia/KSlGwvgpbbeq/PQ0csoUulOnE0+?= =?Windows-1252?Q?k07eN0LjQKBaF9GHLEOnyGFk6Nml03mlwVpHqgh0o4ChtWJo+1dEs0Qk?= =?Windows-1252?Q?eKrnDJGkhN4+xI75jkdTCDRsKbEPosgx68KD45bObNiioTbXcDtFDN9o?= =?Windows-1252?Q?bj4sUSAnHIUqwgKNkbxvMRmCo9GIgkzow7mcgpC/Q1TJsEbV/CRLI707?= =?Windows-1252?Q?XTbZH8mtN3dEepQ5nDicSyPNhwtjOSR5sAax6b2Y1DzWhvWUv1zrWwrj?= =?Windows-1252?Q?R+v8EMjfgtUEFwWnxi0REoIjauQ0bCOV2VwrgzW0LSuah5iR60QPvHXv?= =?Windows-1252?Q?F2tQt7htEPtRDEeus6mhd40PNGsfTg5BHeZnuA2nV9VuGnhi6bQkO3o/?= =?Windows-1252?Q?xwhp9D5QRUH4o5TeHsJiXKmKnNh8az9m2EI6r+/oa6qiddVO1o/YZq2j?= =?Windows-1252?Q?lmFtUr+Zi2Uz5PAkmjKyhPAnsNUw+vEGJG5+9jd0GcCnlwIE3K/iGxqa?= =?Windows-1252?Q?XgYQAYHoov0ljEqaitkjAyUYMSOWCnSaLD0vmQt8DgMdLVlgj07o2QNB?= =?Windows-1252?Q?gbmqKZLT/qa20FkkrqOnfsxosuxqyPPhclOwup2uOIpGsOLLgn2L3OXX?= =?Windows-1252?Q?/PoPnyfcyBrvd0hd35rIlVEta1RfuGcGUFoqoL+Do7KPjaeATnmauk4U?= =?Windows-1252?Q?rwGW6InTu0mNMNXo9UcVh/8tyILZDy7MkZUWcWtN8l8ISHIwil+8XLgs?= =?Windows-1252?Q?nc7tqfsfNVSY+RvCbsoqHetyk+NipQtI/kqv1WhrBUJF06hdzcqj1TcE?= =?Windows-1252?Q?drdGrLXtmGMzE8+YIZm9/gpvYg3mybl4QluJgLqJyOlpLtFzckijdTRe?= =?Windows-1252?Q?Cf4vCeFO0iokZPqXqYGtj1iZB2OHgphqiZBrK/MH1nky68lEbN5vfLFL?= =?Windows-1252?Q?kqMDJovjOFAnUZFiLLTxDCzdQoYlqRM1SpSBh38UspumSIS903UNtRWV?= =?Windows-1252?Q?lHxYm6rcUt4lDpdNMUQotkZ/BIWVMKqE0fBlcd3wzadD4kr1M1k5tf9h?= =?Windows-1252?Q?iZxFsnDShSNaAuqseSgHN/M37onHspYlHhLmt68ov6e3vj4pDN79HuVP?= =?Windows-1252?Q?RmfOn5vlKVt+q4gakRfmJ0ShC5yB7oSQArt600y8GpkfHgk/mUq/pOt6?= =?Windows-1252?Q?4qGKYkP6k7JsD9NuKhgCaUnSWdyB/9PkmJwtOdpgeSvfKljOhTruUsJe?= =?Windows-1252?Q?hvwYYeYKuETbz0romQFp2cqQTdQqqqtGKgf64HQaWyPgTGgj0L8110cp?= =?Windows-1252?Q?//djiwJJdaAm6btxVasTFy6jOzLPC5KkOtRLdCX7Jda+NAQckYxpXUgp?= =?Windows-1252?Q?o5Ay3vEdMXXFgcB8RUgZaOVB0UDS9HSM3dcSBSgth66UedVMtbU1iqNR?= =?Windows-1252?Q?ygR7cr/bIsObvDLofy50jZ0q+xnBZITe/HYorXcORYCFybbKOgw=3D?= =?Windows-1252?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1306;6:pePEBV0L64LWLqcufdJHi3N4s2Q27DxdOcgVxABSZvOe8EOrRQuBF+IDSlSyT+k/Y60ryuXHCp624HPYQp0+KkysWNDfLTmvUXGtrnk2Hbt/a1YmQU/PY/QCG193DKcG61kgRpzR/WDRpaYq9jtCqkmcPeDH7EwP6oc4DEo2cfeTI1rN0I4WPP1yBNNjR3yJL5dvKTk7owTEP/M3LIKZD60eVrMU6nLVEhGqxyW57EpKZWwB0G40k/6EdKUWUMTv0jwgenN5kw+N2f7YvzNr3sr87hRS9NzF9Q9pK6hXV+U=;5:aW0tJpbpKCih/Nmso7gZPhypJYJuMXcXIooi9T1wY2Wj02VOL2FvXRnvMzk9xP5Cono+CKBNXoxhdTuCOa4g9VcWsWHcm9a4ZrfS8G7GzFNXkrbqeH1BtQshitglJyEeybKfNRu2os2JGzgcRIrq6A==;24:TfI2yZBMy8GGm/ABFCk8/dHzRi48jnNFOwdO/ujgUnnsHJgqusEIHnNoevVbc22R+asf3xHPM/ocvH6AN8qu5erdk578moFiDRXP/7/k+AY=;7:GN4cNVD9ibNiifY1/Ao+hEgmth3vwpF0klfD+VwT2H1h1/oDTqwBnfOD512xAyDqXX/rNu1ibvNzOrQB/4MwXK+CH1KF7q2Gmy4SK502bAIxC1lX5cjXMFO/6xdnqp0SYmvH8itXB48ds5uy+EpUkgP2DxaAJpyIyNBJOMT29VZ8eyN5GynvfVpf695iOGl8se+YkG0UMZNkHa2RxmxGfA==;20:/BPuCLec+ayjC7FlikNecmBx2HKKqwALGloCJs02N7n80V1OD8Zv4Cf0wYhFtHf/vhlPFQ22yQC593nKN3WAxvEQeI5T0D8hxdx+k4gIUeTBvURI0Mp3sk09/nEA3T1PxXPmx9gGkveFNXqtEQTYixETlMElwyw4Wpnv3QPHTnE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2016 16:49:11.3833 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1306 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/15/2016 06:26 PM, Alexander Potapenko wrote: > For KASAN builds: > - switch SLUB allocator to using stackdepot instead of storing the > allocation/deallocation stacks in the objects; > - define SLAB_RED_ZONE, SLAB_POISON, SLAB_STORE_USER to zero, > effectively disabling these debug features, as they're redundant in > the presence of KASAN; So, why we forbid these? If user wants to set these, why not? If you don't want it, just don't turn them on, that's it. And sometimes POISON/REDZONE might be actually useful. KASAN doesn't catch everything, e.g. corruption may happen in assembly code, or DMA by some device. > - change the freelist hook so that parts of the freelist can be put into > the quarantine. > > Signed-off-by: Alexander Potapenko > --- ... > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > index fb87923..8c75953 100644 > --- a/mm/kasan/kasan.h > +++ b/mm/kasan/kasan.h > @@ -110,7 +110,7 @@ static inline bool kasan_report_enabled(void) > void kasan_report(unsigned long addr, size_t size, > bool is_write, unsigned long ip); > > -#ifdef CONFIG_SLAB > +#if defined(CONFIG_SLAB) || defined(CONFIG_SLUB) > void quarantine_put(struct kasan_free_meta *info, struct kmem_cache *cache); > void quarantine_reduce(void); > void quarantine_remove_cache(struct kmem_cache *cache); > diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c > index 4973505..89259c2 100644 > --- a/mm/kasan/quarantine.c > +++ b/mm/kasan/quarantine.c > @@ -149,7 +149,12 @@ static void qlink_free(struct qlist_node *qlink, struct kmem_cache *cache) > > local_irq_save(flags); > alloc_info->state = KASAN_STATE_FREE; > +#ifdef CONFIG_SLAB > ___cache_free(cache, object, _THIS_IP_); > +#elif defined(CONFIG_SLUB) > + do_slab_free(cache, virt_to_head_page(object), object, NULL, 1, > + _RET_IP_); > +#endif Please, add some simple wrapper instead of this. > local_irq_restore(flags); > } > ... > diff --git a/mm/slub.c b/mm/slub.c > index 825ff45..f023dd4 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -191,7 +191,11 @@ static inline bool kmem_cache_has_cpu_partial(struct kmem_cache *s) > #define MAX_OBJS_PER_PAGE 32767 /* since page.objects is u15 */ > > /* Internal SLUB flags */ > +#ifndef CONFIG_KASAN > #define __OBJECT_POISON 0x80000000UL /* Poison object */ > +#else > +#define __OBJECT_POISON 0x00000000UL /* Disable object poisoning */ > +#endif > #define __CMPXCHG_DOUBLE 0x40000000UL /* Use cmpxchg_double */ > > #ifdef CONFIG_SMP > @@ -454,10 +458,8 @@ static inline void *restore_red_left(struct kmem_cache *s, void *p) > */ > #if defined(CONFIG_SLUB_DEBUG_ON) > static int slub_debug = DEBUG_DEFAULT_FLAGS; > -#elif defined(CONFIG_KASAN) > -static int slub_debug = SLAB_STORE_USER; > #else > -static int slub_debug; > +static int slub_debug = SLAB_STORE_USER; Huh! So now it is on!? By default, and for everyone!