aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>2006-05-01 15:16:04 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-05-01 21:17:45 -0400
commit275e6e1ee2bafde77e9390b27e876fa83f24cb60 (patch)
treefca0c0a7e3bdabe82bc75a0dad5c765f3b6edaf0
parentcb8aa3d29b562e4c16fdfa4ecc8170ddc55397f4 (diff)
[PATCH] uml: fix compilation and execution with hardened GCC
To make some half-assembly stubs compile, disable various "hardened" GCC features: *) we can't make it build PIC code as we need %ebx to do syscalls and GCC wants it free for PIC *) we can't leave stack protection as the stub is moved (not relocated!) in memory so the RIP-relative access to the canary tries reading from an unmapped address and causes a segfault, since we move the stub of various megabytes (the exact amount will be decided at runtime) away from the link-time address. Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Acked-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--arch/um/Makefile6
-rw-r--r--arch/um/kernel/skas/Makefile9
-rw-r--r--arch/um/sys-i386/Makefile2
-rw-r--r--arch/um/sys-x86_64/Makefile2
4 files changed, 17 insertions, 2 deletions
diff --git a/arch/um/Makefile b/arch/um/Makefile
index 930e00612a22..bed604af6c6f 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -118,6 +118,10 @@ prepare: $(ARCH_DIR)/include/kern_constants.h
118LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static 118LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
119LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib 119LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
120 120
121CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \
122 $(call cc-option, -fno-stack-protector,) \
123 $(call cc-option, -fno-stack-protector-all,)
124
121CPP_MODE-$(CONFIG_MODE_TT) := -DMODE_TT 125CPP_MODE-$(CONFIG_MODE_TT) := -DMODE_TT
122CONFIG_KERNEL_STACK_ORDER ?= 2 126CONFIG_KERNEL_STACK_ORDER ?= 2
123STACK_SIZE := $(shell echo $$[ 4096 * (1 << $(CONFIG_KERNEL_STACK_ORDER)) ] ) 127STACK_SIZE := $(shell echo $$[ 4096 * (1 << $(CONFIG_KERNEL_STACK_ORDER)) ] )
@@ -227,4 +231,4 @@ $(ARCH_DIR)/include/kern_constants.h: $(objtree)/$(ARCH_DIR)/include
227 @echo ' SYMLINK $@' 231 @echo ' SYMLINK $@'
228 $(Q)ln -sf ../../../include/asm-um/asm-offsets.h $@ 232 $(Q)ln -sf ../../../include/asm-um/asm-offsets.h $@
229 233
230export SUBARCH USER_CFLAGS OS 234export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS
diff --git a/arch/um/kernel/skas/Makefile b/arch/um/kernel/skas/Makefile
index 57181a920d48..ad842964707a 100644
--- a/arch/um/kernel/skas/Makefile
+++ b/arch/um/kernel/skas/Makefile
@@ -11,4 +11,11 @@ USER_OBJS := clone.o
11include arch/um/scripts/Makefile.rules 11include arch/um/scripts/Makefile.rules
12 12
13# clone.o is in the stub, so it can't be built with profiling 13# clone.o is in the stub, so it can't be built with profiling
14$(obj)/clone.o : c_flags = -Wp,-MD,$(depfile) $(call unprofile,$(USER_CFLAGS)) 14# GCC hardened also auto-enables -fpic, but we need %ebx so it can't work ->
15# disable it
16
17CFLAGS_clone.o := $(CFLAGS_NO_HARDENING)
18
19# since we're setting c_flags we _must_ add $(CFLAGS_$(*F).o).
20
21$(obj)/clone.o : c_flags = -Wp,-MD,$(depfile) $(call unprofile,$(USER_CFLAGS)) $(CFLAGS_$(*F).o)
diff --git a/arch/um/sys-i386/Makefile b/arch/um/sys-i386/Makefile
index 82121ab03bb0..3734c3eb15a4 100644
--- a/arch/um/sys-i386/Makefile
+++ b/arch/um/sys-i386/Makefile
@@ -13,6 +13,8 @@ USER_OBJS := bugs.o ptrace_user.o sigcontext.o fault.o stub_segv.o
13USER_OBJS += user-offsets.s 13USER_OBJS += user-offsets.s
14extra-y += user-offsets.s 14extra-y += user-offsets.s
15 15
16CFLAGS_stub_segv.o := $(CFLAGS_NO_HARDENING)
17
16extra-$(CONFIG_MODE_TT) += unmap.o 18extra-$(CONFIG_MODE_TT) += unmap.o
17 19
18include arch/um/scripts/Makefile.rules 20include arch/um/scripts/Makefile.rules
diff --git a/arch/um/sys-x86_64/Makefile b/arch/um/sys-x86_64/Makefile
index f739bea35195..6d3b29c74533 100644
--- a/arch/um/sys-x86_64/Makefile
+++ b/arch/um/sys-x86_64/Makefile
@@ -21,6 +21,8 @@ USER_OBJS := ptrace_user.o sigcontext.o stub_segv.o
21USER_OBJS += user-offsets.s 21USER_OBJS += user-offsets.s
22extra-y += user-offsets.s 22extra-y += user-offsets.s
23 23
24CFLAGS_stub_segv.o := $(CFLAGS_NO_HARDENING)
25
24extra-$(CONFIG_MODE_TT) += unmap.o 26extra-$(CONFIG_MODE_TT) += unmap.o
25 27
26include arch/um/scripts/Makefile.rules 28include arch/um/scripts/Makefile.rules