[PATCH 05/13] module, jitalloc: drop module_alloc
From: Mike Rapoport
Date: Thu Jun 01 2023 - 06:17:25 EST
From: "Mike Rapoport (IBM)" <rppt@xxxxxxxxxx>
Define default parameters for address range for code allocations
using the current values in module_alloc() and make jit_text_alloc() use
these defaults when an architecure does not supply its specific
parameters.
With this, jit_text_alloc() implements memory allocation in a way
compatible with module_alloc() and can be used as a replacement for
module_alloc().
Signed-off-by: Mike Rapoport (IBM) <rppt@xxxxxxxxxx>
---
arch/arm64/kernel/module.c | 2 +-
arch/s390/kernel/module.c | 2 +-
arch/x86/kernel/module.c | 2 +-
include/linux/jitalloc.h | 8 ++++++++
include/linux/moduleloader.h | 12 ------------
kernel/module/main.c | 7 -------
mm/jitalloc.c | 31 +++++++++++++++++--------------
7 files changed, 28 insertions(+), 36 deletions(-)
diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c
index ecf1f4030317..91ffcff5a44c 100644
--- a/arch/arm64/kernel/module.c
+++ b/arch/arm64/kernel/module.c
@@ -24,7 +24,7 @@
#include <asm/sections.h>
static struct jit_alloc_params jit_alloc_params = {
- .alignment = MODULE_ALIGN,
+ .alignment = JIT_ALLOC_ALIGN,
.flags = JIT_ALLOC_KASAN_SHADOW,
};
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
index 0986a1a1b261..3f85cf1e7c4e 100644
--- a/arch/s390/kernel/module.c
+++ b/arch/s390/kernel/module.c
@@ -56,7 +56,7 @@ static unsigned long get_module_load_offset(void)
}
static struct jit_alloc_params jit_alloc_params = {
- .alignment = MODULE_ALIGN,
+ .alignment = JIT_ALLOC_ALIGN,
.flags = JIT_ALLOC_KASAN_SHADOW,
.text.pgprot = PAGE_KERNEL,
};
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
index cce84b61a036..cacca613b8bd 100644
--- a/arch/x86/kernel/module.c
+++ b/arch/x86/kernel/module.c
@@ -67,7 +67,7 @@ static unsigned long int get_module_load_offset(void)
#endif
static struct jit_alloc_params jit_alloc_params = {
- .alignment = MODULE_ALIGN,
+ .alignment = JIT_ALLOC_ALIGN,
.flags = JIT_ALLOC_KASAN_SHADOW,
};
diff --git a/include/linux/jitalloc.h b/include/linux/jitalloc.h
index 34ee57795a18..823b13706a90 100644
--- a/include/linux/jitalloc.h
+++ b/include/linux/jitalloc.h
@@ -4,6 +4,14 @@
#include <linux/types.h>
+#if (defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)) && \
+ !defined(CONFIG_KASAN_VMALLOC)
+#include <linux/kasan.h>
+#define JIT_ALLOC_ALIGN (PAGE_SIZE << KASAN_SHADOW_SCALE_SHIFT)
+#else
+#define JIT_ALLOC_ALIGN PAGE_SIZE
+#endif
+
/**
* enum jit_alloc_flags - options for executable memory allocations
* @JIT_ALLOC_KASAN_SHADOW: allocate kasan shadow
diff --git a/include/linux/moduleloader.h b/include/linux/moduleloader.h
index b3374342f7af..4321682fe849 100644
--- a/include/linux/moduleloader.h
+++ b/include/linux/moduleloader.h
@@ -25,10 +25,6 @@ int module_frob_arch_sections(Elf_Ehdr *hdr,
/* Additional bytes needed by arch in front of individual sections */
unsigned int arch_mod_section_prepend(struct module *mod, unsigned int section);
-/* Allocator used for allocating struct module, core sections and init
- sections. Returns NULL on failure. */
-void *module_alloc(unsigned long size);
-
/* Determines if the section name is an init section (that is only used during
* module loading).
*/
@@ -113,12 +109,4 @@ void module_arch_cleanup(struct module *mod);
/* Any cleanup before freeing mod->module_init */
void module_arch_freeing_init(struct module *mod);
-#if (defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)) && \
- !defined(CONFIG_KASAN_VMALLOC)
-#include <linux/kasan.h>
-#define MODULE_ALIGN (PAGE_SIZE << KASAN_SHADOW_SCALE_SHIFT)
-#else
-#define MODULE_ALIGN PAGE_SIZE
-#endif
-
#endif
diff --git a/kernel/module/main.c b/kernel/module/main.c
index 51278c571bcb..dfb7fa109f1a 100644
--- a/kernel/module/main.c
+++ b/kernel/module/main.c
@@ -1600,13 +1600,6 @@ static void free_modinfo(struct module *mod)
}
}
-void * __weak module_alloc(unsigned long size)
-{
- return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END,
- GFP_KERNEL, PAGE_KERNEL_EXEC, VM_FLUSH_RESET_PERMS,
- NUMA_NO_NODE, __builtin_return_address(0));
-}
-
bool __weak module_init_section(const char *name)
{
return strstarts(name, ".init");
diff --git a/mm/jitalloc.c b/mm/jitalloc.c
index 4e10af7803f7..221940e36b46 100644
--- a/mm/jitalloc.c
+++ b/mm/jitalloc.c
@@ -60,20 +60,16 @@ void jit_free(void *buf)
void *jit_text_alloc(size_t len)
{
- if (jit_alloc_params.text.start) {
- unsigned int align = jit_alloc_params.alignment;
- pgprot_t pgprot = jit_alloc_params.text.pgprot;
- unsigned long start = jit_alloc_params.text.start;
- unsigned long end = jit_alloc_params.text.end;
- unsigned long fallback_start = jit_alloc_params.text.fallback_start;
- unsigned long fallback_end = jit_alloc_params.text.fallback_end;
- bool kasan = jit_alloc_params.flags & JIT_ALLOC_KASAN_SHADOW;
-
- return jit_alloc(len, align, pgprot, start, end,
- fallback_start, fallback_end, kasan);
- }
-
- return module_alloc(len);
+ unsigned int align = jit_alloc_params.alignment;
+ pgprot_t pgprot = jit_alloc_params.text.pgprot;
+ unsigned long start = jit_alloc_params.text.start;
+ unsigned long end = jit_alloc_params.text.end;
+ unsigned long fallback_start = jit_alloc_params.text.fallback_start;
+ unsigned long fallback_end = jit_alloc_params.text.fallback_end;
+ bool kasan = jit_alloc_params.flags & JIT_ALLOC_KASAN_SHADOW;
+
+ return jit_alloc(len, align, pgprot, start, end,
+ fallback_start, fallback_end, kasan);
}
struct jit_alloc_params * __weak jit_alloc_arch_params(void)
@@ -101,5 +97,12 @@ void jit_alloc_init(void)
return;
jit_alloc_params = *p;
+ return;
}
+
+ /* defaults for architecures that don't need special handling */
+ jit_alloc_params.alignment = 1;
+ jit_alloc_params.text.pgprot = PAGE_KERNEL_EXEC;
+ jit_alloc_params.text.start = VMALLOC_START;
+ jit_alloc_params.text.end = VMALLOC_END;
}
--
2.35.1