Перехват системного вызова sys_open в linux модуле ядра - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь перехватить системный вызов 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)
};
...