我正在尝试构建一个非常简单的C程序,以便包含到.deb包中。项目的大部分是用Python编写的。当这个程序包含在.deb包中时,lintian会给我hardening-no-fortify-functions警告。
在进一步阅读时,Debian希望您在构建C程序时包含某些标志,并且可以使用dpkg-buildflags --get CFLAGS检索这些标志。
我的初始生成标志如下所示:

gcc -Wall -pedantic -o somefile somefile.c

现在,我和
CFLAGS=`dpkg-buildflags --get CFLAGS`
gcc $CFLAGS -o somefile somefile.c

但是,我继续收到hardening-no-fortify-functions警告。我在这里做错什么了?现在是假阳性吗?我可以添加一个覆盖并忘掉它吗?

最佳答案

有几种可能性,其中第三种可能性似乎最有可能,但我已经提到了1和2,以防它们也给您带来问题:
dpkg-buildflags --get CFLAGS返回了错误的内容。在我的系统上它返回:
-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security
如果你只是从命令行执行它,你会得到什么?
您的值CFLAGS不会传递给gcc。我想您在这里使用的是Makefile语句;这两个语句实际上是相邻的吗?如果是,您不希望CFLAGS =(带空格)吗?或者是在命令行设置CFLAGS,在这种情况下,您应该知道debian构建工具会删除大多数不启动DEB_的内容,因此您需要在构建包的任何内容中设置CFLAGS
CFLAGS不足以消除硬化误差。让我们来看看林寻的错误:http://lintian.debian.org/tags/hardening-no-fortify-functions.html并注意它说的是“确定性:胡乱猜测”。这并不能让人相信这是正确的。然而,我怀疑真正的问题是:你没有带来LDFLAGS。尝试:
$ dpkg-buildflags --get LDFLAGS
-Wl,-Bsymbolic-functions -Wl,-z,relro
你的链接器上需要这些。
这种方法似乎可行(即至少编译):

gcc `dpkg-buildflags --get CFLAGS` `dpkg-buildflags --get LDFLAGS` main.c -o main

10-08 02:21