【问题标题】:__write_overflow declared with attribute error__write_overflow 声明属性错误
【发布时间】:2019-08-02 19:36:32
【问题描述】:

我在我的 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();

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

生成文件:

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。

任何想法如何解决这个错误?

【问题讨论】:

    标签: c linux-kernel


    【解决方案1】:

    这是由于_FORTIFY_SOURCE 的编译时和运行时保护功能,用于查找公共字符串(例如strcpystrcmp)和内存(例如memcpymemcmp)函数中的溢出.信息是herehere

    您可以通过将-D_FORTIFY_SOURCE=0-U_FORTIFY_SOURCE 也可以)传递给编译器来明确关闭此功能。

    编辑:

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

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

    CFLAGS_minfirewall.o := -D_FORTIFY_SOURCE=0
    

    【讨论】:

    • 我可以将它传递给 make 文件吗?
    • 当然。这取决于 Makefile 的编写方式。通常 CFLAGS 已经存在于 Makefile 中,因此您只需将 -D_FORTIFY_SOURCE=0 添加到 CFLAGS 变量即可。给我看看你的 Makefile,我可以告诉你具体怎么做。
    • If Makefile is well written,它可能会让你通过命令行传递CFLAGSmake CFLAGS=-D_FORTIFY_SOURCE=0
    • 我通过make CFLAGS=-D_FORTIFY_SOURCE=0 得到“gcc: error: _FORTIFY_SOURCE=0: No such file or directory”
    • 然后,正如我所说,尝试在 Makefile 中将-D_FORTIFY_SOURCE=0 添加到CFLAGS
    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多