From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/10676 Path: news.gmane.org!.POSTED!not-for-mail From: "LeMay, Michael" Newsgroups: gmane.linux.lib.musl.general Subject: [RFC PATCH v2 3/4] support dynamic linking with SafeStack Date: Fri, 28 Oct 2016 20:02:32 +0000 Message-ID: <390CE752059EB848A71F4F676EBAB76D3AC2637F@ORSMSX114.amr.corp.intel.com> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1477684973 21438 195.159.176.226 (28 Oct 2016 20:02:53 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 28 Oct 2016 20:02:53 +0000 (UTC) To: "musl@lists.openwall.com" Original-X-From: musl-return-10689-gllmg-musl=m.gmane.org@lists.openwall.com Fri Oct 28 22:02:48 2016 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1c0DMU-0004hV-ST for gllmg-musl@m.gmane.org; Fri, 28 Oct 2016 22:02:46 +0200 Original-Received: (qmail 17677 invoked by uid 550); 28 Oct 2016 20:02:48 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 17637 invoked from network); 28 Oct 2016 20:02:46 -0000 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,411,1473145200"; d="scan'208";a="24970552" Thread-Topic: [RFC PATCH v2 3/4] support dynamic linking with SafeStack Thread-Index: AdIxVgGg6Qcl+0KlR8G6mNIXuow5Ug== Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.140] Xref: news.gmane.org gmane.linux.lib.musl.general:10676 Archived-At: This patch initializes SafeStack during dynamic linker initialization. Signed-off-by: Michael LeMay --- ldso/dynlink.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ldso/dynlink.c b/ldso/dynlink.c index e458f38..f9a381f 100644 --- a/ldso/dynlink.c +++ b/ldso/dynlink.c @@ -1324,9 +1324,17 @@ static void update_tls_size() * linker itself, but some of the relocations performed may need to be * replaced later due to copy relocations in the main program. */ =20 +#if SAFE_STACK +void __preinit_unsafe_stack(void); +__attribute__((no_sanitize("safe-stack"))) +#endif __attribute__((__visibility__("hidden"))) void __dls2(unsigned char *base, size_t *sp) { +#if SAFE_STACK + __preinit_unsafe_stack(); +#endif + if (DL_FDPIC) { void *p1 =3D (void *)sp[-2]; void *p2 =3D (void *)sp[-1]; @@ -1388,6 +1396,10 @@ void __dls2(unsigned char *base, size_t *sp) * process dependencies and relocations for the main application and * transfer control to its entry point. */ =20 +#if SAFE_STACK +void __init_unsafe_stack(void); +__attribute__((no_sanitize("safe-stack"))) +#endif _Noreturn void __dls3(size_t *sp) { static struct dso app, vdso; @@ -1420,6 +1432,10 @@ _Noreturn void __dls3(size_t *sp) a_crash(); } =20 +#if SAFE_STACK + __init_unsafe_stack(); +#endif + /* Only trust user/env if kernel says we're not suid/sgid */ if (!libc.secure) { env_path =3D getenv("LD_LIBRARY_PATH"); --=20 2.7.4