From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kees Cook Subject: Re: [kernel-hardening] Re: [PATCH v9 1/4] syscalls: Verify address limit before returning to user-mode Date: Fri, 12 May 2017 14:17:19 -0700 Message-ID: References: <20170512072802.5a686f23@mschwideX1> <20170512075458.09a3a1ce@mschwideX1> <20170512202106.GO22219@n2100.armlinux.org.uk> <20170512210645.GS390@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Return-path: In-Reply-To: <20170512210645.GS390-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org> Sender: linux-api-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Al Viro Cc: Russell King - ARM Linux , Linus Torvalds , Mark Rutland , Kernel Hardening , Greg KH , Heiko Carstens , LKML , David Howells , Dave Hansen , "H . Peter Anvin" , Ingo Molnar , Pavel Tikhomirov , linux-s390 , the arch/x86 maintainers , Will Deacon , Christian Borntraeger , =?UTF-8?Q?Ren=C3=A9_Nyffenegger?= , Catalin Marinas P List-Id: linux-api@vger.kernel.org On Fri, May 12, 2017 at 2:06 PM, Al Viro wrote: > On Fri, May 12, 2017 at 09:21:06PM +0100, Russell King - ARM Linux wrote: >> On Fri, May 12, 2017 at 12:30:02PM -0700, Kees Cook wrote: >> > 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. > > No alloca(), but there are VLAs. Said that, the whole "what if they > can bugger thread_info and/or task_struct and go after set_fs() state" > is idiocy, of course - in that case the box is fucked, no matter what. Two things are at risk from stack exhaustion: thread_info (mainly addr_limit) when on the stack (fixed by THREAD_INFO_IN_TASK), and overflow into adjacent allocations (fixed by VMAP_STACK). The latter is fundamentally a heap overflow. -Kees -- Kees Cook Pixel Security