Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <545B657F.8060805@opensource.dyc.edu>
Date: Thu, 06 Nov 2014 07:11:43 -0500
From: "Anthony G. Basile" <basile@...nsource.dyc.edu>
To: musl@...ts.openwall.com
Subject: Re: fixing -fPIE + -fstack-protector-all

On 11/05/14 11:01, Timo Teras wrote:
> On Wed, 05 Nov 2014 16:25:03 +0100
> John Spencer <maillist-musl@...fooze.de> wrote:
>
>> using -fPIE + -fstack-protector-all is currently broken for a number
>> of architectures (most notably i386) in the default gcc setup
>> (including the musl-cross patches), as it depends on a
>> libssp_nonshared.a which provides __stack_chk_fail_local().
>
> In Alpine Linux we are patching gcc to unconditionally to have
> -lssp_nonshared:
> http://git.alpinelinux.org/cgit/aports/tree/main/gcc/gcc-4.8-musl-libssp.patch

The piepatches do not need to link in anything on glibc or uclibc, 
whereas in your approach they need to pick up the symbol from 
libc_unshared.  It also doesn't depend on whether its a cross compile or 
native attempt to boostrap into a hardened system (gentoo style) form a 
non-hardened musl i686.  In both cases it will fail unless you provide 
__stack_chk_fail_local by some "hack".

>
> And making musl package provide that library:
> http://git.alpinelinux.org/cgit/aports/tree/main/musl/__stack_chk_fail_local.c
> http://git.alpinelinux.org/cgit/aports/tree/main/musl/APKBUILD#n60
>
> This is for two reasons:
>
> 1. gcc bootstrap is broken if it's to be compiled with
> -fstack-protector otherwise
>
> 2. Linking without "-fstack-protector" flag with .a or .o files that
> have been compiled with SSP would break.
>
> Basically, __stack_chk_fail_local symbol should be provided always.

Agreed.  The symbol is there on both x86_64 and i386 in libc_nonshared.a 
(glibc).

What I've never understood is why this appears only as an issue in i686 
and not x86_64 for musl.  I haven't had time to dig into gcc internals 
to find out why.

> Agreeably gcc should emit 'hlt' or similar instead of that function
> call. Or at least provide implementation for that function with 'once'
> linking.
>
> /Timo
>



-- 
Anthony G. Basile, Ph. D.
Chair of Information Technology
D'Youville College
Buffalo, NY 14201
(716) 829-8197

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.