[kernel-hardening] Re: [PATCH v9 1/4] syscalls: Verify address limit before returning to user-mode
From: Kees Cook <hidden>
Date: 2017-05-12 21:04:54
Also in:
linux-api, linux-s390, lkml
On Fri, May 12, 2017 at 2:00 PM, Kees Cook [off-list ref] wrote:
On Fri, May 12, 2017 at 1:45 PM, Russell King - ARM Linux [off-list ref] wrote:quoted
On Fri, May 12, 2017 at 10:30:44PM +0200, Peter Zijlstra wrote:quoted
On Fri, May 12, 2017 at 09:21:06PM +0100, Russell King - ARM Linux wrote:quoted
On Fri, May 12, 2017 at 12:30:02PM -0700, Kees Cook wrote:quoted
I'm clearly not explaining things well enough. I shouldn't say "corruption", I should say "malicious manipulation". The methodology of attacks against the stack are quite different from the other kinds of attacks like use-after-free, heap overflow, etc. Being able to exhaust the kernel stack (either due to deep recursion or unbounded alloca())I really hope we don't have alloca() use in the kernel. Do you have evidence to support that assertion? IMHO alloca() (or similar) should not be present in any kernel code because we have a limited stack - we have kmalloc() etc for that kind of thing.On stack variable length arrays get implemented by the compiler doing alloca(), and we sadly have a few of those around.I hope their size is appropriately limited, but something tells me it would be foolish to assume that.quoted
But yes, fully agreed on the desirability of alloca() and things.Hmm, I wonder if -fno-builtin-alloca would prevent those... it looks like it certainly would prevent an explicit alloca() call.Building with -Werror=vla is exciting. :) A lot of it is in crypto (which are relatively static sizes, just using function callbacks), but there is plenty more.
I meant to also paste an example (which is harmless, I haven't looked
extensively at other examples):
unsigned long alignmask = crypto_tfm_alg_alignmask(tfm);
unsigned int size = crypto_tfm_alg_blocksize(tfm);
u8 buffer[size + alignmask];
Looking at all the places (and having tried to remove a few of these
in pstore), I think it might be quite frustrating to eliminate them
all and then declare VLAs dead. I'm not against trying, though. :)
-Kees
--
Kees Cook
Pixel Security