aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/patch.h
diff options
context:
space:
mode:
authorRabin Vincent <rabin@rab.in>2014-04-24 23:28:57 +0200
committerKees Cook <keescook@chromium.org>2014-10-16 14:38:53 -0700
commitab0615e2d6fb074764a3e4d05f1326fa2fdb4627 (patch)
tree50f160291b6102404b8482c29247099eaf1e68a8 /arch/arm/kernel/patch.h
parentarm: fixmap: implement __set_fixmap() (diff)
downloadlinux-dev-ab0615e2d6fb074764a3e4d05f1326fa2fdb4627.tar.xz
linux-dev-ab0615e2d6fb074764a3e4d05f1326fa2fdb4627.zip
arm: use fixmap for text patching when text is RO
Use fixmaps for text patching when the kernel text is read-only, inspired by x86. This makes jump labels and kprobes work with the currently available CONFIG_DEBUG_SET_MODULE_RONX and the upcoming CONFIG_DEBUG_RODATA options. Signed-off-by: Rabin Vincent <rabin@rab.in> [kees: fixed up for merge with "arm: use generic fixmap.h"] [kees: added parse acquire/release annotations to pass C=1 builds] [kees: always use stop_machine to keep TLB flushing local] Signed-off-by: Kees Cook <keescook@chromium.org> Acked-by: Nicolas Pitre <nico@linaro.org>
Diffstat (limited to 'arch/arm/kernel/patch.h')
-rw-r--r--arch/arm/kernel/patch.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/arm/kernel/patch.h b/arch/arm/kernel/patch.h
index b4731f2dac38..77e054c2f6cd 100644
--- a/arch/arm/kernel/patch.h
+++ b/arch/arm/kernel/patch.h
@@ -2,6 +2,16 @@
#define _ARM_KERNEL_PATCH_H
void patch_text(void *addr, unsigned int insn);
-void __patch_text(void *addr, unsigned int insn);
+void __patch_text_real(void *addr, unsigned int insn, bool remap);
+
+static inline void __patch_text(void *addr, unsigned int insn)
+{
+ __patch_text_real(addr, insn, true);
+}
+
+static inline void __patch_text_early(void *addr, unsigned int insn)
+{
+ __patch_text_real(addr, insn, false);
+}
#endif