Ric*_*ard 5 linux privileges kernel kernel-module
我在内核模块中有两个位置(Linux 3.13):
module_init我的代码是启用硬件性能计数器.当我把它module_init,代码工作正常.但是当我把它放到第二位时(通过运行带有无效操作码的指令触发),代码会permission denied出错(即错误:) -13.
由于这两个地方都在一个内核模块中,"即使在内核空间中,也有不同的权限?"
更新:值得一提的是,当我root在用户空间中运行无效操作码时,-13错误消失了; 否则,它会...
我推测"指令执行的特权决定了它的中断处理程序的执行."
因为module_init和你的hook代码运行在不同的进程中。并且不同进程之间有不同的权限。
一般来说,代码必须在进程中运行。
module_init总是运行在insmoding模块期间(参见sys_init_module函数)。当您 insmod 内核模块时,您必须是 root。并且该进程也是root。所以运行良好。
但是,当您将代码放入IDT时,它可能会在用户进程中运行,因为用户进程会触发中断。所以它得到了-EPERM。
您可以在代码中检查 euid、uid、pid 和 comm。像这样:
int hook_func()
{
printk(KERN_INFO"Code Called in hook_func. My pid: %d, comm: %s, uid: %d, euid: %d\n",
current->tgid, current->comm, current->cred->uid, current->cred->euid);
...
}
int my_init()
{
printk(KERN_INFO"Code Called in my_init. My pid: %d, comm: %s, uid: %d, euid: %d\n",
current->tgid, current->comm, current->cred->uid, current->cred->euid);
...
}
module_init(my_init);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |