On Mon, 2023-09-18 at 10:29 +0300, Mike Rapoport wrote: > diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c > index 5f71a0cf4399..9d37375e2f05 100644 > --- a/arch/x86/kernel/module.c > +++ b/arch/x86/kernel/module.c > @@ -19,6 +19,7 @@ > #include <linux/jump_label.h> > #include <linux/random.h> > #include <linux/memory.h> > +#include <linux/execmem.h> > > #include <asm/text-patching.h> > #include <asm/page.h> > @@ -36,55 +37,30 @@ do > { \ > } while (0) > #endif > > -#ifdef CONFIG_RANDOMIZE_BASE > -static unsigned long module_load_offset; > +static struct execmem_params execmem_params __ro_after_init = { > + .ranges = { > + [EXECMEM_DEFAULT] = { > + .flags = EXECMEM_KASAN_SHADOW, > + .alignment = MODULE_ALIGN, > + }, > + }, > +}; > > -/* Mutex protects the module_load_offset. */ > -static DEFINE_MUTEX(module_kaslr_mutex); > - > -static unsigned long int get_module_load_offset(void) > -{ > - if (kaslr_enabled()) { > - mutex_lock(&module_kaslr_mutex); > - /* > - * Calculate the module_load_offset the first time > this > - * code is called. Once calculated it stays the same > until > - * reboot. > - */ > - if (module_load_offset == 0) > - module_load_offset = > - get_random_u32_inclusive(1, 1024) * > PAGE_SIZE; > - mutex_unlock(&module_kaslr_mutex); > - } > - return module_load_offset; > -} > -#else > -static unsigned long int get_module_load_offset(void) > -{ > - return 0; > -} > -#endif > - > -void *module_alloc(unsigned long size) > +struct execmem_params __init *execmem_arch_params(void) > { > - gfp_t gfp_mask = GFP_KERNEL; > - void *p; > - > - if (PAGE_ALIGN(size) > MODULES_LEN) > - return NULL; > + unsigned long module_load_offset = 0; > + unsigned long start; > > - p = __vmalloc_node_range(size, MODULE_ALIGN, > - 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 (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && kaslr_enabled()) > + module_load_offset = > + get_random_u32_inclusive(1, 1024) * > PAGE_SIZE; Minor: I think you can skip the IS_ENABLED(CONFIG_RANDOMIZE_BASE) part because CONFIG_RANDOMIZE_MEMORY depends on CONFIG_RANDOMIZE_BASE (which is checked in kaslr_enabled()).