>Доброе время суток, All!
>
>Не подскажете как реализовать контроль системных вызовов (open, read, write) к конкретному
>файлу в модуле ядра Linux.
>С sys_call_table и __NR_* const немного знаком. Есть несколько вопросов:
>1) При перехвате __NR_open в мой системный вызов не попадает имя контролируемого
>файла при использовании команды cp (cp /tmp/xxx /tmp/tmp/xxx). В ср что
>нет open?!
>2) Как идентифицировать в системных вызовах read/write etc., что операции производятся именно
>с моим файлом (/tmp/xxx)?
>
>Заранее благодарен.
У меня возникла похожая проблема. Я делал обработчик системного вызова
sys_unlink(const char *pathname) с тем чтобы предотвратить случайное удаление некоторых файлов.Но, если для удаления файла использовалась команда "rm file"(т.е. относительный путь), мне было не определить полное имя.
Первая идея состояла в том, чтобы использовать таблицу ядра "current"(тип "current_task"). Далеее current->fs->pwd->d_name.name. Так мы получим имя родительского/рабочего каталога. Дальше нужно пройтись вверх по дереву каталогов, используя "..->pwd->d_parent" до корня. Но, если удаляемый файл находится в примонтированной ФС, корнем будет каталог монтирования.
Хотя я еще не пробовал, но думаю нужно использовать current->fs->mnt и так далее.
Также можно посмотреть, что делает ядро в своем обработчике.