]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/modules: Set VM_FLUSH_RESET_PERMS in module_alloc()
authorThomas Gleixner <tglx@linutronix.de>
Thu, 15 Sep 2022 11:10:44 +0000 (13:10 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 May 2025 12:10:11 +0000 (14:10 +0200)
commit 4c4eb3ecc91f4fee6d6bf7cfbc1e21f2e38d19ff upstream.

Instead of resetting permissions all over the place when freeing module
memory tell the vmalloc code to do so. Avoids the exercise for the next
upcoming user.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220915111143.406703869@infradead.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/kernel/ftrace.c
arch/x86/kernel/kprobes/core.c
arch/x86/kernel/module.c

index e737437015303a5bc4d467820e4e1b266fcbc04c..48cf91625a169d9ae392f60d367d83f7aad9359a 100644 (file)
@@ -415,8 +415,6 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
        /* ALLOC_TRAMP flags lets us know we created it */
        ops->flags |= FTRACE_OPS_FL_ALLOC_TRAMP;
 
-       set_vm_flush_reset_perms(trampoline);
-
        if (likely(system_state != SYSTEM_BOOTING))
                set_memory_ro((unsigned long)trampoline, npages);
        set_memory_x((unsigned long)trampoline, npages);
index 991f00c817e6c76dc5c97d0c6bda415086231878..180c708879d26391923e3e3495a14bf9929d66b3 100644 (file)
@@ -427,7 +427,6 @@ void *alloc_insn_page(void)
        if (!page)
                return NULL;
 
-       set_vm_flush_reset_perms(page);
        /*
         * First make the page read-only, and only then make it executable to
         * prevent it from being W+X in between.
index 7728060b640cb0c9077e0f66d7ac547a8b8854cd..c34ea5e028c402369c50df4c5ba818f3fee8f77b 100644 (file)
@@ -74,10 +74,11 @@ void *module_alloc(unsigned long size)
                return NULL;
 
        p = __vmalloc_node_range(size, MODULE_ALIGN,
-                                   MODULES_VADDR + get_module_load_offset(),
-                                   MODULES_END, gfp_mask,
-                                   PAGE_KERNEL, VM_DEFER_KMEMLEAK, NUMA_NO_NODE,
-                                   __builtin_return_address(0));
+                                MODULES_VADDR + get_module_load_offset(),
+                                MODULES_END, gfp_mask, PAGE_KERNEL,
+                                VM_FLUSH_RESET_PERMS | VM_DEFER_KMEMLEAK,
+                                NUMA_NO_NODE, __builtin_return_address(0));
+
        if (p && (kasan_alloc_module_shadow(p, size, gfp_mask) < 0)) {
                vfree(p);
                return NULL;