summaryrefslogtreecommitdiffstats
path: root/arch/arm64
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@arm.com>2019-05-23 11:22:55 +0100
committerCatalin Marinas <catalin.marinas@arm.com>2019-06-24 18:10:39 +0100
commitf83b4f8860046e0f5244eef35b25fc3e405d7fee (patch)
tree549e1a313e9ffb8aed756678796125d45ac7e21e /arch/arm64
parent4739d53fcd1df8a9f6f72bb02a3a1d852ad252b3 (diff)
downloadlinux-f83b4f8860046e0f5244eef35b25fc3e405d7fee.tar.gz
linux-f83b4f8860046e0f5244eef35b25fc3e405d7fee.tar.bz2
linux-f83b4f8860046e0f5244eef35b25fc3e405d7fee.zip
arm64/kprobes: set VM_FLUSH_RESET_PERMS on kprobe instruction pages
In order to avoid transient inconsistencies where freed code pages are remapped writable while stale TLB entries still exist on other cores, mark the kprobes text pages with the VM_FLUSH_RESET_PERMS attribute. This instructs the core vmalloc code not to defer the TLB flush when this region is unmapped and returned to the page allocator. Acked-by: Will Deacon <will@kernel.org> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64')
-rw-r--r--arch/arm64/kernel/probes/kprobes.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arm64/kernel/probes/kprobes.c b/arch/arm64/kernel/probes/kprobes.c
index 88ce502c8e6f..bd5dfffca272 100644
--- a/arch/arm64/kernel/probes/kprobes.c
+++ b/arch/arm64/kernel/probes/kprobes.c
@@ -122,8 +122,10 @@ void *alloc_insn_page(void)
void *page;
page = vmalloc_exec(PAGE_SIZE);
- if (page)
+ if (page) {
set_memory_ro((unsigned long)page, 1);
+ set_vm_flush_reset_perms(page);
+ }
return page;
}