| From 5885ed8e6db7648e6842d9811aace7edc4e8aba7 Mon Sep 17 00:00:00 2001 |
| From: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| 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 <fontaine.fabrice@gmail.com> |
| [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 <stdio.h> |
| + |
| + 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 <stdio.h> |
| |
| @@ -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 <stdio.h> |
| - |
| - 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 |
| |