LKM Неявное объявление функции stat - PullRequest
0 голосов
/ 26 июня 2018

Я сейчас пишу модуль ядра Linux (впервые).

Я пытаюсь использовать функцию stat. Я понимаю, что регулярный импорт не будет работать в коде ядра, поэтому я импортировал их эквивалент (это то, что я думал ...):

#include <linux/stat.h>
#include <linux/errno.h>
#include <linux/unistd.h>

Я не получаю ошибок об импорте напрямую, но получаю следующие сообщения:

  • ошибка: неявное объявление функции ‘stat’ [-Werror = неявное объявление-функции]
  • ошибка: «errno» необъявлена ​​(первое использование в этой функции)

Для двух строк соответственно:

int ret = stat(pathname, statbuf);

и

errno = ENOENT;

Любая помощь будет приветствоваться.

Спасибо.

PS: я работаю над Kali 4.9.0-kali4-amd64, но я пытаюсь написать что-то общее, что могло бы работать на нескольких версиях Linux.

1 Ответ

0 голосов
/ 26 июня 2018

Прежде всего, вы, скорее всего, не хотите использовать стат, независимо от того, какая реализация. В худшем случае предполагается, что у вас есть объект 'struct file' или прямой указатель на dentry на файл, который вас интересует. Тогда в маловероятном случае вам нужно получить информацию, предоставленную stat, вы можете использовать соответствующую подпрограмму который берет файл или зубной камень. Затем вы можете продолжить работу с файлом, на который у вас уже есть указатель. Выполнение статистики, а затем решение, что делать, обычно является проблемой безопасности или надежности: к тому времени, когда вы, например, решите открыть целевой путь, это может быть совершенно другой файл - кто-то мог удалить тот, который присутствовал во время вашего вызова статистики, и установить новый. Это часть стандартного класса ошибок: Время проверки Время использования.

Во-вторых, в ядре нет переменной 'errno', и тот факт, что вы пытаетесь использовать ее, настоятельно говорит о том, что вы очень младший программист. По этой причине я подозреваю, что вам пока следует воздерживаться от игры с ядром.

Вы также, вероятно, хотите прочитать эту статью: http://www.watson.org/~robert/2007woot/2007usenixwoot-exploitingconcurrency.pdf

Итак, что именно вы пытаетесь реализовать?

...