如何启用 buildroot gcc 安全构建选项,如 _FORTIFY_SOURCE 和堆栈保护程序?

How to enable buildroot gcc security build options like _FORTIFY_SOURCE and stack protector?

我满足了一个要求,可执行二进制文件必须通过https://github.com/slimm609/checksec.sh,

的检查

所以我为我的工具链 gcc 启用了以下构建配置:

_D_FORTIFY_SOURCE=2  -Wl,-z,relro,-z,now -fstack-protector-all 

但是它在编译过程中没有输出任何警告信息,而当我使用主机 gcc build 时它显示正确的警告信息。

下面是我的构建日志:

jason@linux-server:~/tmp/test$ /opt/buildroot-gcc463/usr/bin/mipsel-buildroot-linux-uclibc-gcc -Wall -O2 -D_FORTIFY_SOURCE=2  -Wl,-z,relro,-z,now -fstack-protector-all -fpie -pie test.c -o testjason 

没有任何警告输出。

While in host x86 gcc: In file included from /usr/include/string.h:640:0, from test.c:2: In function ‘memcpy’, inlined from ‘main’ at test.c:28:8: /usr/include/x86_64-linux-gnu/bits/string3.h:51:3: warning: call to __builtin___memcpy_chk will always overflow destination buffer [enabled by default] return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); ^ In function ‘memset’, inlined from ‘main’ at test.c:35:8: /usr/include/x86_64-linux-gnu/bits/string3.h:84:3: warning: call to __builtin___memset_chk will always overflow destination buffer [enabled by default] return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));

对于构建工具链,我只在 package/gcc/gcc.mk 文件中启用了 libssp:

您的 buildroot 编译器路径表明它是针对 uclibc 的 GCC 4.6。此编译器版本没有您在主机上看到的警告。

此外,uclibc 在任何意义上都不支持 _FORTIFY_SOURCE,因此如果您必须使用具有该功能的工具链,uclibc 是错误的选择。