__write_overflow объявлен с ошибкой атрибута - PullRequest
0 голосов
/ 12 марта 2019

Я использую memset и memcpy в своем проекте ядра Linux. Когда я попытался make проекта, я получил следующую ошибку:

В функции «Memset», встроенный в init_minifw_read_write_module по адресу /home/ido/CLionProjects/Firewall/KernelSpace/minfirewall.c:118:13: ./include/linux/string.h:327:3: ошибка: вызов call __write_overflow ’объявлен с ошибкой атрибута: обнаружена запись за пределы размера объекта, переданного как 1-й параметр __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.

Есть идеи, как исправить эту ошибку?

1 Ответ

1 голос
/ 12 марта 2019

Это связано с функцией _FORTIFY_SOURCE для защиты во время компиляции и во время выполнения для нахождения переполнений в общих строках (например, strcpy, strcmp) и памяти (например, memcpy, memcmp).,Информация здесь и здесь .

Вы можете явно отключить эту функцию, передав -D_FORTIFY_SOURCE=0 (также будет работать -U_FORTIFY_SOURCE) компилятору.

РЕДАКТИРОВАТЬ:

Похоже, вы создаете модуль ядра Linux.Передача опции компилятора для модуля ядра Makefile немного специфичен .

Добавьте следующее в ваш Makefile:

CFLAGS_minfirewall.o := -D_FORTIFY_SOURCE=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...