From: "Mike Rapoport (Microsoft)" <r...@kernel.org>

Enable execmem's cache of PMD_SIZE'ed pages mapped as ROX for module
text allocations.

Signed-off-by: Mike Rapoport (Microsoft) <r...@kernel.org>
---
 arch/x86/mm/init.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index eb503f53c319..a0ec99fb9385 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -1053,6 +1053,15 @@ unsigned long arch_max_swapfile_size(void)
 #ifdef CONFIG_EXECMEM
 static struct execmem_info execmem_info __ro_after_init;
 
+static void execmem_fill_trapping_insns(void *ptr, size_t size, bool writeable)
+{
+       /* fill memory with INT3 instructions */
+       if (writeable)
+               memset(ptr, INT3_INSN_OPCODE, size);
+       else
+               text_poke_set(ptr, INT3_INSN_OPCODE, size);
+}
+
 struct execmem_info __init *execmem_arch_setup(void)
 {
        unsigned long start, offset = 0;
@@ -1063,8 +1072,23 @@ struct execmem_info __init *execmem_arch_setup(void)
        start = MODULES_VADDR + offset;
 
        execmem_info = (struct execmem_info){
+               .fill_trapping_insns = execmem_fill_trapping_insns,
                .ranges = {
-                       [EXECMEM_DEFAULT] = {
+                       [EXECMEM_MODULE_TEXT] = {
+                               .flags  = EXECMEM_KASAN_SHADOW | 
EXECMEM_ROX_CACHE,
+                               .start  = start,
+                               .end    = MODULES_END,
+                               .pgprot = PAGE_KERNEL_ROX,
+                               .alignment = MODULE_ALIGN,
+                       },
+                       [EXECMEM_KPROBES ... EXECMEM_BPF] = {
+                               .flags  = EXECMEM_KASAN_SHADOW,
+                               .start  = start,
+                               .end    = MODULES_END,
+                               .pgprot = PAGE_KERNEL,
+                               .alignment = MODULE_ALIGN,
+                       },
+                       [EXECMEM_MODULE_DATA] = {
                                .flags  = EXECMEM_KASAN_SHADOW,
                                .start  = start,
                                .end    = MODULES_END,
-- 
2.43.0


Reply via email to