57 lines
2.0 KiB
Diff
57 lines
2.0 KiB
Diff
|
From e4ef92852023f4e2f192d3c47220dc75930a615c Mon Sep 17 00:00:00 2001
|
||
|
From: Gustavo Zacarias <gustavo@zacarias.com.ar>
|
||
|
Date: Fri, 11 Sep 2015 16:41:31 -0300
|
||
|
Subject: [PATCH] build: improve stack protector check
|
||
|
|
||
|
Testing a toolchain for proper -fstack-protector must go beyond ensuring
|
||
|
the compiler and linker accept the option.
|
||
|
If the test C program does nothing with the stack then guards aren't
|
||
|
inserted and/or are optimized away giving the false impression that it
|
||
|
works when in fact the libc might not support it.
|
||
|
|
||
|
Update the check to a program that uses the stack, hence making a link
|
||
|
fail if proper support isn't available, for example in non-ssp enabled
|
||
|
uclibc toolchains like this:
|
||
|
|
||
|
test.c:(.text.startup+0x64): undefined reference to `__stack_chk_fail'
|
||
|
|
||
|
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
|
||
|
---
|
||
|
buildtools/wafsamba/samba_autoconf.py | 20 +++++++++++++++++---
|
||
|
1 file changed, 17 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/buildtools/wafsamba/samba_autoconf.py b/buildtools/wafsamba/samba_autoconf.py
|
||
|
index c5f132c..ef34b00 100644
|
||
|
--- a/buildtools/wafsamba/samba_autoconf.py
|
||
|
+++ b/buildtools/wafsamba/samba_autoconf.py
|
||
|
@@ -657,9 +657,23 @@ def SAMBA_CONFIG_H(conf, path=None):
|
||
|
if not IN_LAUNCH_DIR(conf):
|
||
|
return
|
||
|
|
||
|
- if conf.CHECK_CFLAGS(['-fstack-protector']) and conf.CHECK_LDFLAGS(['-fstack-protector']):
|
||
|
- conf.ADD_CFLAGS('-fstack-protector')
|
||
|
- conf.ADD_LDFLAGS('-fstack-protector')
|
||
|
+ # we need to build real code that can't be optimized away to test
|
||
|
+ if conf.check(fragment='''
|
||
|
+ #include <stdio.h>
|
||
|
+
|
||
|
+ int main(void)
|
||
|
+ {
|
||
|
+ char t[100000];
|
||
|
+ while (fgets(t, sizeof(t), stdin));
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+ ''',
|
||
|
+ execute=0,
|
||
|
+ ccflags='-fstack-protector',
|
||
|
+ ldflags='-fstack-protector',
|
||
|
+ msg='Checking if toolchain accepts -fstack-protector'):
|
||
|
+ conf.ADD_CFLAGS('-fstack-protector')
|
||
|
+ conf.ADD_LDFLAGS('-fstack-protector')
|
||
|
|
||
|
if Options.options.debug:
|
||
|
conf.ADD_CFLAGS('-g', testflags=True)
|
||
|
--
|
||
|
2.4.6
|
||
|
|