首页 > 解决方案 > insmod 返回 Killed 可能是因为 task_struct

问题描述

我访问当前进程的结构以获取内核空间中 Linux 模块中当前进程的进程 ID 和命令名称,但是当我使用构建模块make然后将其插入内核时,insmod返回Killed然后我不能甚至从内核中删除我的模块。

这里有什么问题吗?

如您所见,我也尝试使用task_structas global,但我得到了相同的结果。

#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
// #include <linux/moduleparam.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("whoami");
MODULE_DESCRIPTION("Simple LKM");

// char *to_say = "Nothing";
// struct task_struct *current_process;
// module_param(to_say, charp, S_IRUGO);

static int __init initialization_function(void)
{
    struct task_struct *current_process;
    printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);
    return 0;
}

static void __exit cleanup_funcion(void)
{
    printk(KERN_INFO "Module: Bye, World.");
}

module_init(initialization_function);
module_exit(cleanup_funcion);
$ make all
$ sudo insmod my_module.ko
Killed
$ tail -f /var/log/syslog | grep "Module:"

$ sudo rmmod my_module
cannot remove...

我修复了错误,我只是current_processcurrent.

struct task_struct *current_process = current;
printk(KERN_INFO "Module: pid - %d, command name - %s\n", current_process->pid, current_process->comm);

标签: clinuxlinux-kernel

解决方案


推荐阅读