mprotect()类似于Linux内核中的功能

时间:2013-07-16 03:01:51

标签: linux kernel mprotect

我在Linux内核模块中,我用vmalloc()分配了一些内存。我想让内存具有读,写和执行权限。干净,适当的方式是什么?基本上,这通常相当于调用mprotect(),但在内核空间中。

如果我执行页面漫步,pgd_offset()pud_offset()pmd_offset()pte_offset_map(),然后pte_mkwrite(),我会在尝试时遇到错误它在2.6.39。此外,似乎如果我正在进行页面漫步,那它就是一个黑客,应该有一个更清洁,更合适的方法。

我的内核模块将是一个可加载的模块,因此我无法使用内部符号。

提前感谢您的指导。

2 个答案:

答案 0 :(得分:0)

您是否尝试过直接调用do_mprotect()[对应于mprotect()的内核函数?

答案 1 :(得分:0)

这里有一个很好的答案:https://unix.stackexchange.com/questions/450557/is-there-any-function-analogous-to-mprotect-in-the-linux-kernel

asm-generic/set_memory.h:int set_memory_ro(unsigned long addr, int numpages);
asm-generic/set_memory.h:int set_memory_rw(unsigned long addr, int numpages);
asm-generic/set_memory.h:int set_memory_x(unsigned long addr, int numpages);
asm-generic/set_memory.h:int set_memory_nx(unsigned long addr, int numpages);

它们在这里定义:https://elixir.bootlin.com/linux/v4.3/source/arch/x86/include/asm/cacheflush.h#L47