Я пытаюсь перехватить системный вызов sys_open () в linux модуле ядра с помощью ftrace_hook, но sys_open () не сработал. insmod не выдает ошибок, но функция fh_sys_open () даже не вызывается
https://github.com/ilammy/ftrace-hook
Другие системные вызовы работают с нормой (sys_execve (), sys_copy (). ..).
Версия ядра 4.19.0-6-amd64
В другой версии ядра этот код работает
Вот фрагмент кода
static asmlinkage long (*real_sys_open)(const char __user *filename, int flags,
umode_t mode);
static asmlinkage long fh_sys_open(const char __user *filename, int flags,
umode_t mode)
{
long ret;
char *kernel_filename;
/* Copy buffer to kernel space from user space */
kernel_filename = duplicate_filename(filename);
/* Add new event to list */
add_event(kernel_filename, &events_f);
kfree(kernel_filename);
/* Call original function */
ret = real_sys_open(filename, flags, mode);
return ret;
}
/*
* x86_64 kernels have a special naming convention for syscall entry points in newer kernels.
* That's what you end up with if an architecture has 3 (three) ABIs for system calls.
*/
#ifdef PTREGS_SYSCALL_STUBS
#define SYSCALL_NAME(name) ("__x64_" name)
#else
#define SYSCALL_NAME(name) (name)
#endif
#define HOOK(_name, _function, _original) \
{ \
.name = SYSCALL_NAME(_name), \
.function = (_function), \
.original = (_original), \
}
static struct ftrace_hook demo_hooks[] = {
HOOK("sys_open", fh_sys_open, &real_sys_open)
};