Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752087AbdFPVHv (ORCPT ); Fri, 16 Jun 2017 17:07:51 -0400 Received: from mail-ua0-f196.google.com ([209.85.217.196]:33964 "EHLO mail-ua0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750893AbdFPVHu (ORCPT ); Fri, 16 Jun 2017 17:07:50 -0400 MIME-Version: 1.0 In-Reply-To: References: <20170614211556.2062728-1-arnd@arndb.de> <20170614211556.2062728-4-arnd@arndb.de> <20170615045221.GA26687@kroah.com> <20170615045347.GA26913@kroah.com> <20170616130215.GC31057@kroah.com> <20170616155859.gn2einuermlncaku@var.youpi.perso.aquilenet.fr> From: Dmitry Torokhov Date: Fri, 16 Jun 2017 14:07:48 -0700 Message-ID: Subject: Re: [PATCH v2 03/11] tty: kbd: reduce stack size with KASAN To: Arnd Bergmann Cc: Samuel Thibault , Greg Kroah-Hartman , Andrew Morton , kasan-dev , Dmitry Vyukov , Alexander Potapenko , Andrey Ryabinin , Networking , Linux Kernel Mailing List , Arend van Spriel , Jiri Slaby Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1721 Lines: 41 On Fri, Jun 16, 2017 at 1:56 PM, Arnd Bergmann wrote: > On Fri, Jun 16, 2017 at 7:29 PM, Dmitry Torokhov > wrote: >> On Fri, Jun 16, 2017 at 8:58 AM, Samuel Thibault >> wrote: >>> I'm however afraid we'd have to mark a lot of static functions that way, >>> depending on the aggressivity of gcc... I'd indeed really argue that gcc >>> should consider stack usage when inlining. >>> >>> static int f(int foo) { >>> char c[256]; >>> g(c, foo); >>> } >>> >>> is really not something that I'd want to see the compiler to inline. >> >> Why would not we want it be inlined? What we do not want us several >> calls having _separate_ instances of 'c' generated on the stack, all >> inlined calls should share 'c'. And of course if we have f1, f2, and >> f3 with c1, c2, and c3, GCC should not blow up the stack inlining and >> allocating stack for all 3 of them beforehand. >> >> But this all seems to me issue that should be solved in toolchain, not >> trying to play whack-a-mole with kernel sources. > > The problem for the Samuel's example is that > > a) the "--param asan-stack=1" option in KASAN does blow up the > stack, which is why the annotation is now called 'noinline_if_stackbloat'. > > b) The toolchain cannot solve the problem, as most instances of the > problem (unlike kbd_put_queue) force the inlining unless you build > with the x86-specific CONFIG_OPTIMIZE_INLINING. If inlining done right there should be no change in stack size, because if calls are not inlined then stack storage is "shared" between calls, and it should similarly be shared when calls are inlined. And that is toolchain issue. -- Dmitry