From 5885ed8e6db7648e6842d9811aace7edc4e8aba7 Mon Sep 17 00:00:00 2001 From: Fabrice Fontaine Date: Wed, 20 Apr 2022 11:16:52 +0200 Subject: [PATCH] buildtools/wafsamba: add --disable-stack-protector option Allow the user to disable stack-protector through --disable-stack-protector to avoid the following build failure with libtalloc on embedded toolchains which don't support stack-protector: /home/autobuild/autobuild/instance-5/output-1/host/lib/gcc/i686-buildroot-linux-musl/9.4.0/../../../../i686-buildroot-linux-musl/bin/ld: talloc.c.5.o: in function `_vasprintf_tc': talloc.c:(.text+0x427d): undefined reference to `__stack_chk_fail_local' This build failure is raised since https://gitlab.com/ffontaine/samba/-/commit/38e97f8b52e85bdfcf2d74a4fb3c848fa46ba371 because stack-protector is enabled on libtalloc despite the fact that libssp is not available: Checking if compiler accepts -fstack-protector-strong : yes Fixes: - http://autobuild.buildroot.org/results/e221bde25c7622db99761d0adcd56663296beb15 Signed-off-by: Fabrice Fontaine [Upstream status: https://gitlab.com/samba-team/samba/-/merge_requests/2493] --- buildtools/wafsamba/samba_autoconf.py | 49 ++++++++++++++------------- buildtools/wafsamba/wscript | 3 ++ 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/buildtools/wafsamba/samba_autoconf.py b/buildtools/wafsamba/samba_autoconf.py index 78927d85193..23a995e1c34 100644 --- a/buildtools/wafsamba/samba_autoconf.py +++ b/buildtools/wafsamba/samba_autoconf.py @@ -703,9 +703,28 @@ def SAMBA_CONFIG_H(conf, path=None): if not IN_LAUNCH_DIR(conf): return - # we need to build real code that can't be optimized away to test - stack_protect_list = ['-fstack-protector-strong', '-fstack-protector'] - for stack_protect_flag in stack_protect_list: + if not Options.options.disable_stack_protector: + # we need to build real code that can't be optimized away to test + stack_protect_list = ['-fstack-protector-strong', '-fstack-protector'] + for stack_protect_flag in stack_protect_list: + flag_supported = conf.check(fragment=''' + #include + + int main(void) + { + char t[100000]; + while (fgets(t, sizeof(t), stdin)); + return 0; + } + ''', + execute=0, + cflags=[ '-Werror', '-Wp,-D_FORTIFY_SOURCE=2', stack_protect_flag], + mandatory=False, + msg='Checking if compiler accepts %s' % (stack_protect_flag)) + if flag_supported: + conf.ADD_CFLAGS('%s' % (stack_protect_flag)) + break + flag_supported = conf.check(fragment=''' #include @@ -717,29 +736,11 @@ def SAMBA_CONFIG_H(conf, path=None): } ''', execute=0, - cflags=[ '-Werror', '-Wp,-D_FORTIFY_SOURCE=2', stack_protect_flag], + cflags=[ '-Werror', '-fstack-clash-protection'], mandatory=False, - msg='Checking if compiler accepts %s' % (stack_protect_flag)) + msg='Checking if compiler accepts -fstack-clash-protection') if flag_supported: - conf.ADD_CFLAGS('%s' % (stack_protect_flag)) - break - - flag_supported = conf.check(fragment=''' - #include - - int main(void) - { - char t[100000]; - while (fgets(t, sizeof(t), stdin)); - return 0; - } - ''', - execute=0, - cflags=[ '-Werror', '-fstack-clash-protection'], - mandatory=False, - msg='Checking if compiler accepts -fstack-clash-protection') - if flag_supported: - conf.ADD_CFLAGS('-fstack-clash-protection') + conf.ADD_CFLAGS('-fstack-clash-protection') if Options.options.debug: conf.ADD_CFLAGS('-g', testflags=True) diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript index 8729b0829da..d75bb3b1c0c 100644 --- a/buildtools/wafsamba/wscript +++ b/buildtools/wafsamba/wscript @@ -165,6 +165,9 @@ Currently the only tested value is 'smbtorture,smbd/smbd' for Samba'''), gr.add_option('--disable-warnings-as-errors', help=("Do not treat all warnings as errors (disable -Werror)"), action="store_true", dest='disable_warnings_as_errors', default=False) + gr.add_option('--disable-stack-protector', + help=("Disable stack-protector"), + action="store_true", dest='disable_stack_protector', default=False) opt.add_option('--enable-coverage', help=("enable options necessary for code coverage " "reporting on selftest (default=no)"), -- 2.35.1