From 68b15ea50307129be0d2f3ae02fdc4c176ab70d8 Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Thu, 8 Jun 2023 12:08:02 +0200 Subject: [PATCH] Fix CALLDATALOAD for large offsets (#1085) --- evm/src/cpu/kernel/asm/memory/syscalls.asm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/evm/src/cpu/kernel/asm/memory/syscalls.asm b/evm/src/cpu/kernel/asm/memory/syscalls.asm index 694b73a1..5f02382f 100644 --- a/evm/src/cpu/kernel/asm/memory/syscalls.asm +++ b/evm/src/cpu/kernel/asm/memory/syscalls.asm @@ -110,6 +110,9 @@ global sys_calldataload: // stack: kexit_info, i %charge_gas_const(@GAS_VERYLOW) // stack: kexit_info, i + %mload_context_metadata(@CTX_METADATA_CALLDATA_SIZE) + %stack (calldata_size, kexit_info, i) -> (calldata_size, i, kexit_info, i) + LT %jumpi(calldataload_large_offset) %stack (kexit_info, i) -> (@SEGMENT_CALLDATA, i, 32, sys_calldataload_after_mload_packing, kexit_info) GET_CONTEXT // stack: ADDR: 3, 32, sys_calldataload_after_mload_packing, kexit_info @@ -119,6 +122,9 @@ sys_calldataload_after_mload_packing: SWAP1 EXIT_KERNEL PANIC +calldataload_large_offset: + %stack (kexit_info, i) -> (kexit_info, 0) + EXIT_KERNEL // Macro for {CALLDATA,CODE,RETURNDATA}COPY (W_copy in Yellow Paper). %macro wcopy(segment, context_metadata_size)