/* Finally, free the core (containing the module structure) */
disable_ro_nx(&mod->core_layout);
module_memfree(mod->core_layout.base);
-
-#ifdef CONFIG_MPU
- update_protections(current->mm);
-#endif
}
void *__symbol_get(const char *symbol)
}
/*
- * update protection on a vma
- */
-static void protect_vma(struct vm_area_struct *vma, unsigned long flags)
-{
-#ifdef CONFIG_MPU
- struct mm_struct *mm = vma->vm_mm;
- long start = vma->vm_start & PAGE_MASK;
- while (start < vma->vm_end) {
- protect_page(mm, start, flags);
- start += PAGE_SIZE;
- }
- update_protections(mm);
-#endif
-}
-
-/*
* add a VMA into a process's mm_struct in the appropriate place in the list
* and tree and add to the address space's page tree also if not an anonymous
* page
mm->map_count++;
vma->vm_mm = mm;
- protect_vma(vma, vma->vm_flags);
-
/* add the VMA to the mapping */
if (vma->vm_file) {
mapping = vma->vm_file->f_mapping;
struct mm_struct *mm = vma->vm_mm;
struct task_struct *curr = current;
- protect_vma(vma, 0);
-
mm->map_count--;
for (i = 0; i < VMACACHE_SIZE; i++) {
/* if the vma is cached, invalidate the entire cache */