lkml.org 
[lkml]   [2022]   [Oct]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/core] x86/modules: Set VM_FLUSH_RESET_PERMS in module_alloc()
    The following commit has been merged into the x86/core branch of tip:

    Commit-ID: 4c4eb3ecc91f4fee6d6bf7cfbc1e21f2e38d19ff
    Gitweb: https://git.kernel.org/tip/4c4eb3ecc91f4fee6d6bf7cfbc1e21f2e38d19ff
    Author: Thomas Gleixner <tglx@linutronix.de>
    AuthorDate: Thu, 15 Sep 2022 13:10:44 +02:00
    Committer: Peter Zijlstra <peterz@infradead.org>
    CommitterDate: Mon, 17 Oct 2022 16:40:57 +02:00

    x86/modules: Set VM_FLUSH_RESET_PERMS in module_alloc()

    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
    ---
    arch/x86/kernel/ftrace.c | 2 --
    arch/x86/kernel/kprobes/core.c | 1 -
    arch/x86/kernel/module.c | 9 +++++----
    3 files changed, 5 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
    index bd16500..00eac45 100644
    --- a/arch/x86/kernel/ftrace.c
    +++ b/arch/x86/kernel/ftrace.c
    @@ -413,8 +413,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);
    diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
    index eb8bc82..01b8d95 100644
    --- a/arch/x86/kernel/kprobes/core.c
    +++ b/arch/x86/kernel/kprobes/core.c
    @@ -414,7 +414,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.
    diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
    index c032edc..43f0112 100644
    --- a/arch/x86/kernel/module.c
    +++ b/arch/x86/kernel/module.c
    @@ -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;
    \
     
     \ /
      Last update: 2022-10-17 16:59    [W:4.136 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site