about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2017-08-27 22:26:49 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2017-08-27 22:29:43 +0200
commit99ee4d26dc07c3eadfbf6793db26ef9dfb1551e5 (patch)
tree44121c6237d1bfbf27d9508c51328207f94c8802
parent97e02ad23392f929862d6a04643e7f2fd91baebc (diff)
downloadglibc-99ee4d26dc07c3eadfbf6793db26ef9dfb1551e5.tar.gz
glibc-99ee4d26dc07c3eadfbf6793db26ef9dfb1551e5.tar.xz
glibc-99ee4d26dc07c3eadfbf6793db26ef9dfb1551e5.zip
hurd: Fix static initialization with -fstack-protector-strong
When linked statically, TLS initialization is not achieved before
mach_init and alike, so ssp accesses to tcbhead's stack_guard would
crash.  We can just avoid using ssp in the few functions needed before
TLS is set up.

	* mach/Makefile (CFLAGS-mach_init.o, CFLAGS-RPC_vm_statistics.o,
	CFLAGS-RPC_vm_map.o, CFLAGS-RPC_vm_protect.o,
	CFLAGS-RPC_i386_set_gdt.o, CFLAGS-RPC_i386_set_ldt.o,
	CFLAGS-RPC_task_get_special_port.o): Add $(no-stack-protector).
	* hurd/Makefile (CFLAGS-hurdstartup.o,
	CFLAGS-RPC_exec_startup_get_info.o): Add $(no-stack-protector).
-rw-r--r--ChangeLog6
-rw-r--r--hurd/Makefile4
-rw-r--r--mach/Makefile9
3 files changed, 19 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d94fee93b..a93769f3b5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,12 @@
 	stack_chk_fail_local.
 	* mach/Versions (GLIBC_2.4): Add __stack_chk_fail.
 	* hurd/Versions (GLIBC_2.4): Add __stack_chk_fail.
+	* mach/Makefile (CFLAGS-mach_init.o, CFLAGS-RPC_vm_statistics.o,
+	CFLAGS-RPC_vm_map.o, CFLAGS-RPC_vm_protect.o,
+	CFLAGS-RPC_i386_set_gdt.o, CFLAGS-RPC_i386_set_ldt.o,
+	CFLAGS-RPC_task_get_special_port.o): Add $(no-stack-protector).
+	* hurd/Makefile (CFLAGS-hurdstartup.o,
+	CFLAGS-RPC_exec_startup_get_info.o): Add $(no-stack-protector).
 
 2017-08-25  H.J. Lu  <hongjiu.lu@intel.com>
 
diff --git a/hurd/Makefile b/hurd/Makefile
index 9205822b24..b44b9b80c6 100644
--- a/hurd/Makefile
+++ b/hurd/Makefile
@@ -81,6 +81,10 @@ $(inlines:%=$(objpfx)%.c): $(objpfx)%-inlines.c: %.h
 	 echo '#include "$<"') > $@-new
 	mv -f $@-new $@
 generated += $(inlines:=.c)
+
+# Avoid ssp before TLS is initialized.
+CFLAGS-hurdstartup.o = $(no-stack-protector)
+CFLAGS-RPC_exec_startup_get_info.o = $(no-stack-protector)
 
 include ../mach/Machrules
 include ../Rules
diff --git a/mach/Makefile b/mach/Makefile
index 127cad00ca..b4f18b1525 100644
--- a/mach/Makefile
+++ b/mach/Makefile
@@ -53,6 +53,15 @@ server-interfaces := mach/exc
 
 # Clear any environment	value.
 generated =
+
+# Avoid ssp before TLS is initialized.
+CFLAGS-mach_init.o = $(no-stack-protector)
+CFLAGS-RPC_vm_statistics.o = $(no-stack-protector)
+CFLAGS-RPC_vm_map.o = $(no-stack-protector)
+CFLAGS-RPC_vm_protect.o = $(no-stack-protector)
+CFLAGS-RPC_i386_set_gdt.o = $(no-stack-protector)
+CFLAGS-RPC_i386_set_ldt.o = $(no-stack-protector)
+CFLAGS-RPC_task_get_special_port.o = $(no-stack-protector)
 
 # Translate GNU names for CPUs into the names used in Mach header files.
 mach-machine = $(patsubst powerpc,ppc,$(base-machine))