C语言 __write_overflow声明了属性错误

xqnpmsa8  于 2023-05-28  发布在  其他
关注(0)|答案(2)|浏览(235)

我在我的linux内核项目中使用memsetmemcpy。当我尝试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。
有什么办法可以解决这个错误吗?

rhfm7lfc

rhfm7lfc1#

这是由于_FORTIFY_SOURCE的编译时和运行时保护功能,用于查找公共字符串中的溢出(例如strcpystrcmp)和存储器(例如memcpymemcmp)函数。信息是herehere
您可以通过将-D_FORTIFY_SOURCE=0-U_FORTIFY_SOURCE也可以)传递给编译器来显式地关闭此功能。
编辑:
看起来你正在构建一个Linux内核模块。传递内核模块Makefile的编译器选项有点specific
将以下内容添加到Makefile:

CFLAGS_minfirewall.o := -D_FORTIFY_SOURCE=0
0md85ypi

0md85ypi2#

您是否能够解决上述错误。即使在使用建议的更改后,我也一直面临着同样的错误。如果有新的解决方案,请您提供帮助。- 毗湿奴

相关问题