虚拟内存保护 - Linux内核

时间:2015-01-03 12:01:37

标签: linux linux-kernel virtual-memory

首先 - 我的目标是允许执行kmalloc分配的内存。 给出以下代码片段(假设给出了函数foo的大小):

void foo()
{
      printk("Nothing that matters.\n");
}

void bar()
{
     void* s = kmalloc(PAGE_SIZE, GFP_KERNEL);
     memcpy(s, foo, SIZE OF FOO);
     void (*f)(void) = (void(*)(void))s;
     f();

}

以下代码产生一个gp,因为我没有kmalloced分配页面的执行权限。

我使用以下方法解决了同样的问题@ OSX:

kern_return_t
mach_vm_protect(
mach_port_name_t task,
mach_vm_address_t address,
mach_vm_size_t size,
boolean_t set_maximum,
vm_prot_t new_protection);

现在我正试图在Linux中找到解决此问题的方法。

我尝试了以下内容:

    pgd_t* pgd = pgd_offset(mm, address);
    pmd_t* pmd = pmd_offset(pgd, address);  
    pte_t pte = /**pte_offset_map(pmd, address)*/*pte_offset_kernel(pmd, address);
    pte_mkexec(pte);

但到目前为止还没有运气。如果有人在过去遇到过同样的问题,我很乐意听到一些问题的建议/解决方案。

0 个答案:

没有答案