Re: randomize_kstack: To init or not to init?
From: Marco Elver <elver@google.com>
Date: 2021-12-20 07:00:19
Also in:
linux-toolchains, lkml
On Thu, 9 Dec 2021 at 21:33, Marco Elver [off-list ref] wrote:
On Thu, 9 Dec 2021 at 21:19, Segher Boessenkool [off-list ref] wrote:quoted
On Thu, Dec 09, 2021 at 10:58:01AM +0100, Marco Elver wrote:quoted
Clang supports CONFIG_INIT_STACK_ALL_ZERO, which appears to be the default since dcb7c0b9461c2, which is why this came on my radar. And Clang also performs auto-init of allocas when auto-init is on (https://reviews.llvm.org/D60548), with no way to skip. As far as I'm aware, GCC 12's upcoming -ftrivial-auto-var-init= doesn't yet auto-init allocas.The space allocated by alloca is not an automatic variable, so of course it is not affected by this compiler flag. And it should not, this flag is explicitly for *small fixed-size* stack variables (initialising others can be much too expensive).quoted
C. Introduce a new __builtin_alloca_uninitialized().That is completely backwards. That is the normal behaviour of alloca already. Also you can get __builtin_alloca inserted by the compiler (for a variable length array for example), and you typically do not want those initialised either, for the same reasons.You're right, if we're strict about it, initializing allocas is technically out-of-scope of that feature. So, option D: Add a param to control this, and probably it shouldn't do it by default. Let's see how far that gets then.
Just an update: after some discussion, the Clang side says that alloca() is in scope, because the intent is that trivially initialized "automatic stack storage" should be handled by ftrivial-auto-var-init. And alloca() is automatic stack storage: https://www.gnu.org/software/libc/manual/html_node/Variable-Size-Automatic.html So currently it looks like the builtin is the only solution in this case. Thanks.