我在我的linux内核项目中使用memset
和memcpy
。当我尝试make
项目时,我得到了以下错误:
在函数“memset”中,内联自/home/ido/CLionProjects/Firewall/KernelSpace/minfirewall的“init_minifw_read_write_module”。c:118:13:./include/linux/string.h:327:3:错误:调用“__write_overflow”声明了属性错误:检测到写入超出作为第一个参数__write_overflow()传递的对象大小;
我没有找到任何解决上述错误的方法。
Makefile:
obj-m += minfirewall.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
我运行的内核版本4.18.0-15-generic。
有什么办法可以解决这个错误吗?
2条答案
按热度按时间rhfm7lfc1#
这是由于
_FORTIFY_SOURCE
的编译时和运行时保护功能,用于查找公共字符串中的溢出(例如strcpy
、strcmp
)和存储器(例如memcpy
,memcmp
)函数。信息是here和here。您可以通过将
-D_FORTIFY_SOURCE=0
(-U_FORTIFY_SOURCE
也可以)传递给编译器来显式地关闭此功能。编辑:
看起来你正在构建一个Linux内核模块。传递内核模块Makefile的编译器选项有点specific。
将以下内容添加到Makefile:
0md85ypi2#
您是否能够解决上述错误。即使在使用建议的更改后,我也一直面临着同样的错误。如果有新的解决方案,请您提供帮助。- 毗湿奴