我在我的 Linux 内核项目中使用 memset
和 memcpy
。
当我尝试 make
项目时,出现以下错误:
In function ‘memset’, inlined from ‘init_minifw_read_write_module’ at /home/ido/CLionProjects/Firewall/KernelSpace/minfirewall.c:118:13: ./include/linux/string.h:327:3: error: call to ‘__write_overflow’ declared with attribute error: detected write beyond size of object passed as 1st parameter __write_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
我正在运行内核版本 4.18.0-15-generic。
有什么想法可以解决这个错误吗?
最佳答案
这是由于用于编译时和运行时保护的 _FORTIFY_SOURCE
功能,用于查找公共(public)字符串中的溢出(例如 strcpy
、strcmp
>)和内存(例如 memcpy
、memcmp
)函数。信息是here和 here .
您可以通过将 -D_FORTIFY_SOURCE=0
(-U_FORTIFY_SOURCE
也可以使用)传递给编译器来显式关闭此功能。
编辑:
看起来您正在构建一个 Linux 内核模块。为内核模块 Makefile 传递编译器选项有点specific .
将以下内容添加到您的 Makefile:
CFLAGS_minfirewall.o := -D_FORTIFY_SOURCE=0
关于c - __write_overflow 声明属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119644/