123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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
|