Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751847AbcCJOAZ (ORCPT ); Thu, 10 Mar 2016 09:00:25 -0500 Received: from mail-wm0-f54.google.com ([74.125.82.54]:33129 "EHLO mail-wm0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751710AbcCJOAT convert rfc822-to-8bit (ORCPT ); Thu, 10 Mar 2016 09:00:19 -0500 MIME-Version: 1.0 In-Reply-To: <20160309120912.83a82c79fd2bf6d21ab2c16a@linux-foundation.org> References: <20160309120912.83a82c79fd2bf6d21ab2c16a@linux-foundation.org> Date: Thu, 10 Mar 2016 15:00:17 +0100 Message-ID: Subject: Re: [PATCH v5 5/7] mm, kasan: Stackdepot implementation. Enable stackdepot for SLAB From: Alexander Potapenko To: Andrew Morton Cc: Andrey Konovalov , Christoph Lameter , Dmitriy Vyukov , Andrey Ryabinin , Steven Rostedt , Joonsoo Kim , JoonSoo Kim , Kostya Serebryany , kasan-dev , LKML , Linux Memory Management List Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3471 Lines: 103 On Wed, Mar 9, 2016 at 9:09 PM, Andrew Morton wrote: > On Wed, 9 Mar 2016 12:05:46 +0100 Alexander Potapenko wrote: > >> Implement the stack depot and provide CONFIG_STACKDEPOT. >> Stack depot will allow KASAN store allocation/deallocation stack traces >> for memory chunks. The stack traces are stored in a hash table and >> referenced by handles which reside in the kasan_alloc_meta and >> kasan_free_meta structures in the allocated memory chunks. >> >> IRQ stack traces are cut below the IRQ entry point to avoid unnecessary >> duplication. >> >> Right now stackdepot support is only enabled in SLAB allocator. >> Once KASAN features in SLAB are on par with those in SLUB we can switch >> SLUB to stackdepot as well, thus removing the dependency on SLUB stack >> bookkeeping, which wastes a lot of memory. >> >> This patch is based on the "mm: kasan: stack depots" patch originally >> prepared by Dmitry Chernenkov. >> > > Have you identified other potential clients for the stackdepot code? Joonsoo Kim said he is planning to use stackdepot for the page owner. >> --- /dev/null >> +++ b/include/linux/stackdepot.h >> @@ -0,0 +1,32 @@ >> +/* >> + * A generic stack depot implementation >> + * >> + * Author: Alexander Potapenko >> + * Copyright (C) 2016 Google, Inc. >> + * >> + * Based on code by Dmitry Chernenkov. >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + * This program is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + */ >> + >> +#ifndef _LINUX_STACKDEPOT_H >> +#define _LINUX_STACKDEPOT_H >> + >> +typedef u32 depot_stack_handle; > > I'll rename this to depot_stack_handle_t, which is a pretty strong > kernel convention. Ok, thank you! >> +struct stack_trace; >> + >> +depot_stack_handle depot_save_stack(struct stack_trace *trace, gfp_t flags); >> + >> +void depot_fetch_stack(depot_stack_handle handle, struct stack_trace *trace); >> + >> +#endif >> diff --git a/lib/Kconfig b/lib/Kconfig >> index ee38a3f..8a60a53 100644 >> --- a/lib/Kconfig >> +++ b/lib/Kconfig >> @@ -543,4 +543,7 @@ config ARCH_HAS_PMEM_API >> config ARCH_HAS_MMIO_FLUSH >> bool >> >> +config STACKDEPOT >> + bool >> + >> endmenu >> diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan >> index 0e4d2b3..468316d 100644 >> --- a/lib/Kconfig.kasan >> +++ b/lib/Kconfig.kasan >> @@ -7,6 +7,7 @@ config KASAN >> bool "KASan: runtime memory debugger" >> depends on SLUB_DEBUG || (SLAB && !DEBUG_SLAB) >> select CONSTRUCTORS >> + select STACKDEPOT if SLAB >> help >> Enables kernel address sanitizer - runtime memory debugger, >> designed to find out-of-bounds accesses and use-after-free bugs. > > Something weird happened to the Kconfig whitespace. I'll fix that. Thanks! > -- Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Straße, 33 80636 München Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg