From ace7ec4afc43c1bb15f9f63fa2b9acd560554c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Fri, 3 Jan 2025 00:06:40 +0100 Subject: [PATCH] Revert "Refactor - Sanitization of memory accesses in JIT (#6)" (#14) cad781a3b8f148e1421c706ee2e1bd765f80b437 --- src/jit.rs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/jit.rs b/src/jit.rs index 78bbea34b..387dd9022 100644 --- a/src/jit.rs +++ b/src/jit.rs @@ -1169,16 +1169,12 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { match vm_addr { Value::RegisterPlusConstant64(reg, constant, user_provided) => { - debug_assert!(user_provided); - // First half of emit_sanitized_load_immediate(REGISTER_SCRATCH, vm_addr) - let lower_key = self.immediate_value_key as i32 as i64; - self.emit_ins(X86Instruction::lea(OperandSize::S64, reg, REGISTER_SCRATCH, Some( - if reg == R12 { - X86IndirectAccess::OffsetIndexShift(constant.wrapping_sub(lower_key) as i32, RSP, 0) - } else { - X86IndirectAccess::Offset(constant.wrapping_sub(lower_key) as i32) - } - ))); + if user_provided && self.should_sanitize_constant(constant) { + self.emit_sanitized_load_immediate(REGISTER_SCRATCH, constant); + } else { + self.emit_ins(X86Instruction::load_immediate(REGISTER_SCRATCH, constant)); + } + self.emit_ins(X86Instruction::alu(OperandSize::S64, 0x01, reg, REGISTER_SCRATCH, None)); }, _ => { #[cfg(debug_assertions)] @@ -1597,8 +1593,6 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { ] { let target_offset = *anchor_base + len.trailing_zeros() as usize; self.set_anchor(ANCHOR_TRANSLATE_MEMORY_ADDRESS + target_offset); - // Second half of emit_sanitized_load_immediate(REGISTER_SCRATCH, vm_addr) - self.emit_ins(X86Instruction::alu_immediate(OperandSize::S64, 0x81, 0, REGISTER_SCRATCH, lower_key, None)); // call MemoryMapping::(load|store) storing the result in RuntimeEnvironmentSlot::ProgramResult if *anchor_base == 0 { // AccessType::Load let load = match len {