From f326b4ff591e6e23f08a96f748e18cd12ef5c9e4 Mon Sep 17 00:00:00 2001
From: whh8b <whh8b@git.zephyr-software.com>
Date: Wed, 11 May 2016 18:17:55 +0000
Subject: [PATCH] Fix bug that caused rewrite lengths to be incomplete.

---
 mixr/mixr.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/mixr/mixr.c b/mixr/mixr.c
index 915e348..e77d843 100644
--- a/mixr/mixr.c
+++ b/mixr/mixr.c
@@ -490,6 +490,7 @@ void mixr_do_rw(uint64_t dollop_start, struct rw_table_entry rw_entry)
 	uint32_t rw32_val;
 	uint64_t rw48_val;
 	uint64_t rw64_val;
+	int rewrite_length = 0;
 
 #if DEBUG
 	print_str_debug("Abs ");
@@ -509,30 +510,35 @@ void mixr_do_rw(uint64_t dollop_start, struct rw_table_entry rw_entry)
 		{
 			rw8_val = rw_entry.absolute_value-next_pc_address;
 			rw_val = (void*)&rw8_val;
+			rewrite_length = 1;
 			break;
 		}
 		case 0x1:
 		{
 			rw16_val = rw_entry.absolute_value-next_pc_address;
 			rw_val = (void*)&rw16_val;
+			rewrite_length = 2;
 			break;
 		}
 		case 0x3:
 		{
 			rw32_val = rw_entry.absolute_value-next_pc_address;
 			rw_val = (void*)&rw32_val;
+			rewrite_length = 4;
 			break;
 		}
 		case 0x5:
 		{
 			rw48_val = rw_entry.absolute_value-next_pc_address;
 			rw_val = (void*)&rw48_val;
+			rewrite_length = 6;
 			break;
 		}
 		case 0x7:
 		{
 			rw64_val = rw_entry.absolute_value-next_pc_address;
 			rw_val = (void*)&rw64_val;
+			rewrite_length = 8;
 			break;
 		}
 	}
@@ -546,7 +552,7 @@ void mixr_do_rw(uint64_t dollop_start, struct rw_table_entry rw_entry)
 	_mprotect((void*)(((uintptr_t)relative)&PAGE_MASK),
 	          PAGE_SIZE + PAGE_SIZE,
 						PROT_READ|PROT_EXEC|PROT_WRITE);
-	_memcpy((void*)relative, rw_val, rw_entry.rewrite_length);
+	_memcpy((void*)relative, rw_val, rewrite_length);
 	_mprotect((void*)(((uintptr_t)relative)&PAGE_MASK),
 	          PAGE_SIZE + PAGE_SIZE,
 						PROT_READ|PROT_EXEC);
-- 
GitLab