Как разместить исполняемую страницу в модуле ядра Linux? - PullRequest
7 голосов
/ 17 марта 2010

Я пишу модуль ядра Linux, и я хотел бы выделить исполняемую страницу. Обычная kmalloc возвращает указатель на неисполняемой странице, и я испытываю панику ядра при выполнении там кода. Он должен работать на Ubuntu Karmic x86, 2.6.31-20-generic-pae.

Ответы [ 2 ]

9 голосов
/ 17 марта 2010
#include <linux/vmalloc.h>
#include <asm/pgtype_types.h>
...
char *p = __vmalloc(byte_size, GFP_KERNEL, PAGE_KERNEL_EXEC);
...
if (p != NULL) vfree(p);
0 голосов
/ 31 мая 2019
/**
 * vmalloc_exec - allocate virtually contiguous, executable memory
 * @size:     allocation size
 *
 * Kernel-internal function to allocate enough pages to cover @size
 * the page level allocator and map them into contiguous and
 * executable kernel virtual space.
 *
 * For tight control over page level allocator and protection flags
 * use __vmalloc() instead.
 *
 * Return: pointer to the allocated memory or %NULL on error
 */
void *vmalloc_exec(unsigned long size)
{
    return __vmalloc_node(size, 1, GFP_KERNEL, PAGE_KERNEL_EXEC,
                  NUMA_NO_NODE, __builtin_return_address(0));
}
...