diff options
Diffstat (limited to 'arch/arm64/mm/ktext.c')
-rw-r--r-- | arch/arm64/mm/ktext.c | 21 |
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; |