我正在尝试构建一个非常简单的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警告。我在这里做错什么了?这是假阳性吗?我能不能添加一个覆盖然后忘掉它?
发布于 2014-01-26 09:51:30
有几种可能性,第三种似乎最有可能,但我已经提到了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不足以消除硬化误差。让我们看一下lintian错误: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 mainhttps://stackoverflow.com/questions/21318235
复制相似问题