void *module_alloc(unsigned long size) { struct vm_struct *area; size = PAGE_ALIGN(size); if (!size) return NULL; area = __get_vm_area(size, VM_ALLOC, MODULES_VADDR, MODULES_END); if (!area) return NULL; return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL_EXEC); }
static void *__module_alloc(unsigned long size, pgprot_t prot) { struct vm_struct *area; if (!size) return NULL; size = PAGE_ALIGN(size); if (size > MODULES_LEN) return NULL; area = __get_vm_area(size, VM_ALLOC, MODULES_VADDR, MODULES_END); if (!area) return NULL; return __vmalloc_area(area, GFP_KERNEL | __GFP_ZERO, prot); }