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

问题描述 投票:0回答:1

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

linux-kernel operating-system system-calls kernel-module protected-mode
1个回答
2
投票

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

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

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

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.