有没有办法从linux内核模块调用用户空间函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法从linux内核模块调用用户空间函数?相关的知识,希望对你有一定的参考价值。

想象一下这样的情况:我将从系统调用中获取位于用户空间中的函数指针,并且内核模块调用此函数。 (这个函数在用户空间中运行很重要)kenel模块是否会看到与用户空间应用程序相同的内存地址(获取的函数指针)? (我的意思是用户的虚拟地址空间或线路地址空间)

答案

首先,你试图做错事。如果您需要内核中的自定义代码,则将其作为内核模块提供。

链接副本(Executing a user-space function from the kernel space)中的答案主要是垃圾。只要没有使用系统调用并且没有使用tls /其他任何东西,这将在某些体系结构上“起作用”。事实上,这就是充足的漏洞利用程序。

我将从系统调用中获取位于用户空间中的函数指针,并且内核模块将回调此函数。

听起来你真的想要做一些倒退的事情。如果您需要一个用户空间组件,那就应该拥有所有逻辑。然后你调用内核告诉它该做什么。

(这个函数在用户空间中运行很重要吗?)

你在问谁?我只能声明调用由用户空间种植的函数并不意味着它开始“在用户空间中运行”。切换到用户空间是很多工作,绝对不是通过调用函数来完成的。

内核模块是否会看到与用户空间应用程序相同的内存地址(获取的函数指针)?

取决于架构,通常会。但即使这样,使用这个“功能”的硬件保护也必须明确禁用。

但同样,你不想这样做。我强烈建议你陈述实际问题。

以上是关于有没有办法从linux内核模块调用用户空间函数?的主要内容,如果未能解决你的问题,请参考以下文章

从内核空间执行用户空间函数

Linux内核系统调用的基础信息

Linux内核模块编程问题

Linux内核模块编程问题

linux下的系统调用函数到内核函数的追踪

Linux 内核Linux 内核体系架构 ( 硬件层面 | 内核空间 | 用户空间 | 内核态与用户态切换 | 系统调用 | 体系结构抽象层 )