如何更改内核中堆的权限space?
how to change permissions of heap in kernel space?
我目前正在为 Linux 编写内核模块,并一直在尝试动态分配一大块内存并更改其权限 (rwx),但它就是行不通。
do_mmap
和 init_mm
似乎丢失了(被链接器识别为未定义)。
一个可能的解决方案可能是访问内核的 vma,但我找不到访问它的方法。
是否可以更改内核中堆的权限space?
vmalloc_exec
未导出供驱动使用,因此您无法使用它。
但是,__vmalloc
采用页面保护参数,所以它应该做你想做的事:
void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
所以要分配可执行页面,试试这个:
void *p = __vmalloc(size, GFP_KERNEL, PAGE_KERNEL_EXEC);
我目前正在为 Linux 编写内核模块,并一直在尝试动态分配一大块内存并更改其权限 (rwx),但它就是行不通。
do_mmap
和 init_mm
似乎丢失了(被链接器识别为未定义)。
一个可能的解决方案可能是访问内核的 vma,但我找不到访问它的方法。
是否可以更改内核中堆的权限space?
vmalloc_exec
未导出供驱动使用,因此您无法使用它。
但是,__vmalloc
采用页面保护参数,所以它应该做你想做的事:
void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
所以要分配可执行页面,试试这个:
void *p = __vmalloc(size, GFP_KERNEL, PAGE_KERNEL_EXEC);