summaryrefslogtreecommitdiff
path: root/arch/arm64/mm/ktext.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm64/mm/ktext.c')
-rw-r--r--arch/arm64/mm/ktext.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/arm64/mm/ktext.c b/arch/arm64/mm/ktext.c
index 04b5ceddae4e..0017e7760d36 100644
--- a/arch/arm64/mm/ktext.c
+++ b/arch/arm64/mm/ktext.c
@@ -17,6 +17,27 @@
static void *kernel_texts[MAX_NUMNODES];
+noinstr void ktext_replication_write(void *addr, void *data, size_t size)
+{
+ unsigned long offset;
+ void *ptr;
+ int nid;
+
+ if (!is_kernel_text((unsigned long)addr))
+ return;
+
+ offset = (unsigned long)addr - (unsigned long)_stext;
+
+ for_each_node(nid) {
+ if (!kernel_texts[nid] || !nid)
+ continue;
+
+ ptr = kernel_texts[nid] + offset;
+
+ memcpy(ptr, data, size);
+ }
+}
+
void __kprobes ktext_replication_patch(u32 *tp, __le32 insn)
{
unsigned long offset;