This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: why Glibc does not build with clang?


On Fri, May 16, 2014 at 03:53:04PM +0200, OndÅej BÃlka wrote:
> On Fri, May 16, 2014 at 02:44:22PM +0200, Florian Weimer wrote:
> > On 05/16/2014 02:37 PM, Will Newton wrote:
> > 
> > >I'm curious as to why you want to get rid of alloca?
> > 
> > There's no explicit checking if the stack has room for the requested
> > size.  It is not always clear if the implied length check through
> > the explicit guard page prevents deliberate misuse of such alloca
> > failures for nefarious purposes.  So we risk having crashes (already
> > quite bad) and often cannot rule out any further security impact
> > beyond the crash (worse).
> > 
> > Same thing applies to VLAs on the stack, obviously.
> > 
> > GCC could provide fairly cheap instrumentation (both in terms of
> > code size and execution speed) that turns alloca failures (and
> > too-large VLas) into reliable crashes, but that GCC feature is
> > currently somewhat broken and not usable at all.
> > 
> All you need is reliable way to get stack boundaries. I proposed to add
> these some time ago. It would make alloca failures reliable without
> need of gcc support.

The cost of a function call to look up the current stack boundaries
(or a TLS access to get that info on some archs where TLS access is
expensive) defeats much of the purpose of using alloca.

Moreover, turning alloca failures into "reliable crashes" is not a
solution. If an operation requires allocation which could fail, it
must be able to back out whatever work it already did and report
failure. Crashing is not an acceptable implementation.

Really, alloca should just be dropped. Even if alloca were able to
report failure, it could exhaust enough stack space that a subsequent
call to a function with a moderate constant-size stack usage crashes.

Rich


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]