From 556bda74a0b1147f73da58dc348ea791769cfc2f Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Thu, 31 Aug 2023 14:14:21 +0200 Subject: [PATCH] hypervisor: emulator: Use wrapping add for memory offset Assume rax is 0xfee003e0 and the displacement is negative 0x60. The effective address is then 0xfee00380. This is perfectly valid. Example instruction: c7 40 a0 00 10 00 00 movl $0x1000,-0x60(%rax) Signed-off-by: Philipp Schuster --- hypervisor/src/arch/x86/emulator/instructions/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hypervisor/src/arch/x86/emulator/instructions/mod.rs b/hypervisor/src/arch/x86/emulator/instructions/mod.rs index 72b97acfb..9998537d2 100644 --- a/hypervisor/src/arch/x86/emulator/instructions/mod.rs +++ b/hypervisor/src/arch/x86/emulator/instructions/mod.rs @@ -124,7 +124,7 @@ fn memory_operand_address( address += index; } - address += insn.memory_displacement64(); + address = address.wrapping_add(insn.memory_displacement64()); // Translate to a linear address. state.linearize(insn.memory_segment(), address, write)