Re: [Xen-devel] [PATCH v5 15/16] livepatch, arm[32|64]: Share arch_livepatch_revert
> Same as previously, can this not be done with a simple memcpy? Done! From caaf99c75f28486737c21f1fc5f584b67e088f35 Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek WilkDate: Fri, 23 Sep 2016 11:25:12 -0400 Subject: [PATCH v6] livepatch, arm[32|64]: Share arch_livepatch_revert It is exactly the same in both platforms. No functional change. Acked-by: Julien Grall Signed-off-by: Konrad Rzeszutek Wilk --- Cc: Julien Grall Cc: Stefano Stabellini v3: New submission. v4: s/arch_livepatch_insn_len/livepatch_insn_len/ s/PATCH_INSN_SIZE/ARCH_PATCH_INSN_SIZE/ v5: Added Julien's Acked-by. Fixed comments. - Rebase on top "livepatch: Drop _jmp from arch_livepatch_[apply,revert]_jmp" - s/_jmp// v6: - Rebase on top ARM64 and ARM32 implementations which now have clean_and_invalidate_dcache_va_range on new_ptr. --- xen/arch/arm/arm32/livepatch.c | 13 + xen/arch/arm/arm64/livepatch.c | 13 + xen/arch/arm/livepatch.c | 13 + 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/xen/arch/arm/arm32/livepatch.c b/xen/arch/arm/arm32/livepatch.c index d9a8caa..a7fd5e2 100644 --- a/xen/arch/arm/arm32/livepatch.c +++ b/xen/arch/arm/arm32/livepatch.c @@ -75,18 +75,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(new_ptr, sizeof (*new_ptr) * len); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ -uint32_t *new_ptr; -unsigned int len; - -new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; - -len = livepatch_insn_len(func); -memcpy(new_ptr, func->opaque, len); - -clean_and_invalidate_dcache_va_range(new_ptr, len); -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/arm64/livepatch.c b/xen/arch/arm/arm64/livepatch.c index 558acb9..dae64f5 100644 --- a/xen/arch/arm/arm64/livepatch.c +++ b/xen/arch/arm/arm64/livepatch.c @@ -62,18 +62,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(new_ptr, sizeof (*new_ptr) * len); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ -uint32_t *new_ptr; -unsigned int len; - -new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; - -len = livepatch_insn_len(func); -memcpy(new_ptr, func->opaque, len); - -clean_and_invalidate_dcache_va_range(new_ptr, len); -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/livepatch.c b/xen/arch/arm/livepatch.c index dfa285c..de95e54 100644 --- a/xen/arch/arm/livepatch.c +++ b/xen/arch/arm/livepatch.c @@ -69,6 +69,19 @@ int arch_livepatch_verify_func(const struct livepatch_func *func) return 0; } +void arch_livepatch_revert(const struct livepatch_func *func) +{ +uint32_t *new_ptr; +unsigned int len; + +new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; + +len = livepatch_insn_len(func); +memcpy(new_ptr, func->opaque, len); + +clean_and_invalidate_dcache_va_range(new_ptr, len); +} + void arch_livepatch_post_action(void) { /* arch_livepatch_revive has nuked the instruction cache. */ -- 2.4.11 > > -- > Ross Lagerwall ___ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel
Re: [Xen-devel] [PATCH v5 15/16] livepatch, arm[32|64]: Share arch_livepatch_revert
On 09/21/2016 06:32 PM, Konrad Rzeszutek Wilk wrote: It is exactly the same in both platforms. No functional change. Acked-by: Julien GrallSigned-off-by: Konrad Rzeszutek Wilk --- Cc: Julien Grall Cc: Stefano Stabellini v3: New submission. v4: s/arch_livepatch_insn_len/livepatch_insn_len/ s/PATCH_INSN_SIZE/ARCH_PATCH_INSN_SIZE/ v5: Added Julien's Acked-by. Fixed comments. - Rebase on top "livepatch: Drop _jmp from arch_livepatch_[apply,revert]_jmp" - s/_jmp// --- xen/arch/arm/arm32/livepatch.c | 17 + xen/arch/arm/arm64/livepatch.c | 17 + xen/arch/arm/livepatch.c | 17 + 3 files changed, 19 insertions(+), 32 deletions(-) diff --git a/xen/arch/arm/arm32/livepatch.c b/xen/arch/arm/arm32/livepatch.c index 3f47326..7e600f2 100644 --- a/xen/arch/arm/arm32/livepatch.c +++ b/xen/arch/arm/arm32/livepatch.c @@ -74,22 +74,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ -uint32_t *new_ptr; -unsigned int i, len; - -new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; -len = livepatch_insn_len(func) / sizeof(uint32_t); -for ( i = 0; i < len; i++ ) -{ -uint32_t insn; - -memcpy(, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); -/* PATCH! */ -*(new_ptr + i) = insn; -} -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/arm64/livepatch.c b/xen/arch/arm/arm64/livepatch.c index ea8044d..a7a292f 100644 --- a/xen/arch/arm/arm64/livepatch.c +++ b/xen/arch/arm/arm64/livepatch.c @@ -61,22 +61,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ -uint32_t *new_ptr; -unsigned int i, len; - -new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; -len = livepatch_insn_len(func) / sizeof(uint32_t); -for ( i = 0; i < len; i++ ) -{ -uint32_t insn; - -memcpy(, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); -/* PATCH! */ -*(new_ptr + i) = insn; -} -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/livepatch.c b/xen/arch/arm/livepatch.c index 6ee7081..2d62a24 100644 --- a/xen/arch/arm/livepatch.c +++ b/xen/arch/arm/livepatch.c @@ -69,6 +69,23 @@ int arch_livepatch_verify_func(const struct livepatch_func *func) return 0; } +void arch_livepatch_revert(const struct livepatch_func *func) +{ +uint32_t *new_ptr; +unsigned int i, len; + +new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; +len = livepatch_insn_len(func) / sizeof(uint32_t); +for ( i = 0; i < len; i++ ) +{ +uint32_t insn; + +memcpy(, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); +/* PATCH! */ +*(new_ptr + i) = insn; +} +} + Same as previously, can this not be done with a simple memcpy? -- Ross Lagerwall ___ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel
[Xen-devel] [PATCH v5 15/16] livepatch, arm[32|64]: Share arch_livepatch_revert
It is exactly the same in both platforms. No functional change. Acked-by: Julien GrallSigned-off-by: Konrad Rzeszutek Wilk --- Cc: Julien Grall Cc: Stefano Stabellini v3: New submission. v4: s/arch_livepatch_insn_len/livepatch_insn_len/ s/PATCH_INSN_SIZE/ARCH_PATCH_INSN_SIZE/ v5: Added Julien's Acked-by. Fixed comments. - Rebase on top "livepatch: Drop _jmp from arch_livepatch_[apply,revert]_jmp" - s/_jmp// --- xen/arch/arm/arm32/livepatch.c | 17 + xen/arch/arm/arm64/livepatch.c | 17 + xen/arch/arm/livepatch.c | 17 + 3 files changed, 19 insertions(+), 32 deletions(-) diff --git a/xen/arch/arm/arm32/livepatch.c b/xen/arch/arm/arm32/livepatch.c index 3f47326..7e600f2 100644 --- a/xen/arch/arm/arm32/livepatch.c +++ b/xen/arch/arm/arm32/livepatch.c @@ -74,22 +74,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ -uint32_t *new_ptr; -unsigned int i, len; - -new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; -len = livepatch_insn_len(func) / sizeof(uint32_t); -for ( i = 0; i < len; i++ ) -{ -uint32_t insn; - -memcpy(, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); -/* PATCH! */ -*(new_ptr + i) = insn; -} -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/arm64/livepatch.c b/xen/arch/arm/arm64/livepatch.c index ea8044d..a7a292f 100644 --- a/xen/arch/arm/arm64/livepatch.c +++ b/xen/arch/arm/arm64/livepatch.c @@ -61,22 +61,7 @@ void arch_livepatch_apply(struct livepatch_func *func) clean_and_invalidate_dcache_va_range(func->new_addr, func->new_size); } -void arch_livepatch_revert(const struct livepatch_func *func) -{ -uint32_t *new_ptr; -unsigned int i, len; - -new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; -len = livepatch_insn_len(func) / sizeof(uint32_t); -for ( i = 0; i < len; i++ ) -{ -uint32_t insn; - -memcpy(, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); -/* PATCH! */ -*(new_ptr + i) = insn; -} -} +/* arch_livepatch_revert shared with ARM 32/ARM 64. */ int arch_livepatch_verify_elf(const struct livepatch_elf *elf) { diff --git a/xen/arch/arm/livepatch.c b/xen/arch/arm/livepatch.c index 6ee7081..2d62a24 100644 --- a/xen/arch/arm/livepatch.c +++ b/xen/arch/arm/livepatch.c @@ -69,6 +69,23 @@ int arch_livepatch_verify_func(const struct livepatch_func *func) return 0; } +void arch_livepatch_revert(const struct livepatch_func *func) +{ +uint32_t *new_ptr; +unsigned int i, len; + +new_ptr = func->old_addr - (void *)_start + vmap_of_xen_text; +len = livepatch_insn_len(func) / sizeof(uint32_t); +for ( i = 0; i < len; i++ ) +{ +uint32_t insn; + +memcpy(, func->opaque + (i * sizeof(uint32_t)), ARCH_PATCH_INSN_SIZE); +/* PATCH! */ +*(new_ptr + i) = insn; +} +} + void arch_livepatch_post_action(void) { /* arch_livepatch_revive has nuked the instruction cache. */ -- 2.4.11 ___ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel