C __用属性错误声明写入溢出

C __用属性错误声明写入溢出,c,linux-kernel,C,Linux Kernel,我正在linux内核项目中使用memset和memcpy。 当我尝试制作项目时,我得到了以下错误: 在函数“memset”中, 内联自/home/ido/CLionProjects/Firewall/KernelSpace/minfirewall.c:118:13: ./include/linux/string.h:327:3:错误:调用用属性error声明的“\uuuu write\u overflow”:检测到写入超出作为第一个参数传递的对象的大小 __写入溢出() 我没有找到任何解决上述错

我正在linux内核项目中使用
memset
memcpy
。 当我尝试
制作项目时,我得到了以下错误:

在函数“memset”中, 内联自/home/ido/CLionProjects/Firewall/KernelSpace/minfirewall.c:118:13: ./include/linux/string.h:327:3:错误:调用用属性error声明的“\uuuu write\u overflow”:检测到写入超出作为第一个参数传递的对象的大小 __写入溢出()

我没有找到任何解决上述错误的方法

生成文件:

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
CFLAGS_minfirewall.o := -D_FORTIFY_SOURCE=0
我正在运行内核版本4.18.0-15-generic


有没有办法修复这个错误?

这是由于
的源代码增强功能提供了编译时和运行时保护,用于查找公共字符串(例如
strcpy
strcmp
)和内存(例如
memcpy
memcmp
)函数中的溢出。信息是和

您可以通过将
-D_-FORTIFY\U SOURCE=0
传递给编译器来明确关闭此功能(
-U-FORTIFY\U SOURCE
也可以工作)

编辑:

看起来您正在构建一个Linux内核模块。为内核模块Makefile传递编译器选项有点困难

将以下内容添加到Makefile:

CFLAGS_minfirewall.o := -D_FORTIFY_SOURCE=0

我可以把它传给make文件吗?当然可以。这取决于Makefile的编写方式。通常,
CFLAGS
已经存在于Makefile中,所以您只需要将
-D\u FORTIFY\u SOURCE=0
添加到
CFLAGS
变量中。给我看看你的Makefile,我可以告诉你怎么做。它可以让你通过命令行传递
CFLAGS
makecflags=-D\u-FORTIFY\u-SOURCE=0
。我传递了
makecflags=-D\u-FORTIFY\u-SOURCE=0
,然后得到了“gcc:error:\u-FORTIFY\u-SOURCE=0:没有这样的文件或目录”,就像我说的那样,尝试将
-D\u FORTIFY\u SOURCE=0添加到Makefile中的
CFLAGS