我目前正在为Linux编写内核模块,并且一直在尝试动态分配大块内存并更改其权限(rwx),但它无法正常工作。
似乎缺少 do_mmap
和init_mm
(链接器认为未定义)。
可能的解决方案可能是访问内核的vma,但我找不到访问它的方法。
是否可以在内核空间中更改堆的权限?
答案 0 :(得分:1)
vmalloc_exec
未导出供驾驶员使用,因此您无法使用它。
但是,__vmalloc
会采用页面保护参数,因此它应该执行您想要的操作:
void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
所以要分配可执行页面,试试这个:
void *p = __vmalloc(size, GFP_KERNEL, PAGE_KERNEL_EXEC);