Что делает `insmod` бесконечным при попытке использовать приложение syscall hook в Ubuntu? - PullRequest
0 голосов
/ 19 марта 2020

Я борюсь со своим назначением, которое дает вкус Linux операций перехвата системных вызовов. Я имею в виду присоединение перехвата к вызову sys_rt_sigaction с использованием подхода модуля ядра. Модуль выглядит следующим образом:

#define __KERNEL__
#define MODULE

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/unistd.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <linux/syscalls.h>
#include <asm/unistd.h>

void **sys_call_table;

MODULE_AUTHOR("author_name");
MODULE_DESCRIPTION("Linux kernel hook program");
MODULE_LICENSE("GPL");

asmlinkage int (*real_rt_sigaction)(int signum, const struct sigaction *act,
                                    struct sigaction *oldact, size_t sigsetsize);

static int __init buffer_init_module(void);
static void __exit buffer_exit_module(void);

asmlinkage int alter_rt_sigaction(int signum, const struct sigaction *act,
                       struct sigaction *oldact, size_t sigsetsize) {
    printk(KERN_INFO "Syscall function hooked - just what I want");
    return 0;
}

int buffer_init_module(void)
{
    printk(KERN_INFO
    "Device initializing in progress...");   

    real_rt_sigaction=sys_call_table[__NR_rt_sigaction];
    sys_call_table[__NR_rt_sigaction]=alter_rt_sigaction;

    return 0;
}

void buffer_exit_module(void)
{

    printk(KERN_INFO "Outside the module - exit successfully completed\n");
    sys_call_table[__NR_rt_sigaction]=real_rt_sigaction;
}

Makefile для этого:

obj-m += buffer.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

Это не создает никаких проблем на первый взгляд, однако программа запускается в бесконечный процесс после запуска sudo insmod buffer.ko (make выполнение приводит к довольно плавному построению файла .ko). Локальной ОС является Ubuntu 18.04. Я должен предоставить код, который присоединяет хук к указанной функции c syscall, просто больше ничего. Кажется, я пропускаю некоторые важные вещи в реальной программе, скорее всего, в Makefile , но мне не хватает понимания того, что не так.

...