mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
ANDROID: arm64: patching: Add aarch64_addr_write()
The process of applying hypervisor relocations involves patching addresses in the hypervisor object. In the existing KVM nVHE relocation procedure, the relocations are applied early enough for write-permission not to be a problem when touching e.g. the rodata section. But applying relocations on hypervisor modules embedded in a kernel module proves more challenging, as the kernel module loader will actively map text and rodata sections read-only. In order to allow patching in those sections, let's introduce a new helper function using the text fixmap to temporarily map the relevant pages writable. Bug: 244543039 Bug: 244373730 Change-Id: I9dcdade1927e5bc121db87bc950fb70a374c44cd Signed-off-by: Quentin Perret <qperret@google.com>
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
|
||||
int aarch64_insn_read(void *addr, u32 *insnp);
|
||||
int aarch64_insn_write(void *addr, u32 insn);
|
||||
int aarch64_addr_write(void *addr, u64 dst);
|
||||
|
||||
int aarch64_insn_patch_text_nosync(void *addr, u32 insn);
|
||||
int aarch64_insn_patch_text(void *addrs[], u32 insns[], int cnt);
|
||||
|
||||
@@ -90,6 +90,11 @@ int __kprobes aarch64_insn_write(void *addr, u32 insn)
|
||||
return __aarch64_text_write(addr, &__insn, AARCH64_INSN_SIZE);
|
||||
}
|
||||
|
||||
int __kprobes aarch64_addr_write(void *addr, u64 dst)
|
||||
{
|
||||
return __aarch64_text_write(addr, &dst, sizeof(dst));
|
||||
}
|
||||
|
||||
int __kprobes aarch64_insn_patch_text_nosync(void *addr, u32 insn)
|
||||
{
|
||||
u32 *tp = addr;
|
||||
|
||||
Reference in New Issue
Block a user