__write_overflow声明为属性错误

时间:2019-03-12 10:48:26

标签: c linux-kernel

我在Linux内核项目中使用memsetmemcpy。 当我尝试make项目时,出现以下错误:

  

在“ memset”功能中,       从/home/ido/CLionProjects/Firewall/KernelSpace/minfirewall.c:118:13的“ init_minifw_read_write_module”内联:   ./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版内核。

有什么办法解决此错误吗?

1 个答案:

答案 0 :(得分:1)

这是由于_FORTIFY_SOURCE功能提供了编译时和运行时保护,用于查找公用字符串(例如strcpystrcmp)和内存(例如{{1 }},memcpy)函数。信息为herehere

您可以通过向编译器传递memcmp-D_FORTIFY_SOURCE=0也可以)来显式关闭此功能。

编辑:

似乎正在构建Linux内核模块。为内核模块Makefile传递编译器选项有点specific

将以下内容添加到您的Makefile中:

-U_FORTIFY_SOURCE