Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into asiegel/explorer-fixes-2
Browse files Browse the repository at this point in the history
  • Loading branch information
asiegel-jt committed Sep 17, 2024
2 parents 6be49a4 + f55c236 commit c09bd06
Show file tree
Hide file tree
Showing 14 changed files with 85 additions and 89 deletions.
3 changes: 2 additions & 1 deletion contrib/test/txn-fixtures/program-tests.list
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ dump/test-vectors/txn/fixtures/programs/crash-2a071a64139bf15f205d9284c323d2ed75
dump/test-vectors/txn/fixtures/programs/crash-3267f556a7239eb9191fd5489db0341675fbbfd4.fix
dump/test-vectors/txn/fixtures/programs/crash-3354ca5c9ba1c2ea78c33855ec5ced47dcf9f29e.fix
dump/test-vectors/txn/fixtures/programs/crash-35325b58777ff62396ae18f13047a8fe2260d1b8.fix
dump/test-vectors/txn/fixtures/programs/crash-38b53303426b0cb17570b27f89be658a890b867d-feature.fix
dump/test-vectors/txn/fixtures/programs/crash-38b53303426b0cb17570b27f89be658a890b867d-add_new_reserved_account_keys.fix
dump/test-vectors/txn/fixtures/programs/crash-38b53303426b0cb17570b27f89be658a890b867d.fix
dump/test-vectors/txn/fixtures/programs/crash-3cdf49a1820462499f5b27e90cf0b0301ae7477c.fix
dump/test-vectors/txn/fixtures/programs/crash-42295e53abb4382e2d579d46dcb1b20e63f030ea.fix
Expand All @@ -37,4 +37,5 @@ dump/test-vectors/txn/fixtures/programs/crash-ebdcdc6274bbf5f326439bf13868124500
dump/test-vectors/txn/fixtures/programs/crash-f2a184eee1b1e6d5d455923d93825767843fcea6.fix
dump/test-vectors/txn/fixtures/programs/d5e2332f53032ce4428b0b55e3a97c080c1db63e_1034518.fix
dump/test-vectors/txn/fixtures/programs/deff84b60ea3c6284e621b4229f402c4274e4968_1446008.fix
dump/test-vectors/txn/fixtures/programs/eaed07290ea8722cb900e1e648ca5209fa35ef6c_3861880.fix
dump/test-vectors/txn/fixtures/programs/ed4565e33252bca4dc606bdce4aa48a650e75048_1366919.fix
2 changes: 1 addition & 1 deletion src/flamenco/runtime/program/fd_bpf_loader_program.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ execute( fd_exec_instr_ctx_t * instr_ctx, fd_sbpf_validated_program_t * prog, uc
ulong pre_insn_cus = instr_ctx->txn_ctx->compute_meter;
ulong heap_max = true ? instr_ctx->txn_ctx->heap_size : FD_VM_HEAP_DEFAULT; /* TODO:FIXME: fix this */

/* TODO: (topointon): correctly set check_align and check_size in vm setup */
/* TODO: (topointon): correctly set check_size in vm setup */
vm = fd_vm_init(
/* vm */ vm,
/* instr_ctx */ instr_ctx,
Expand Down
8 changes: 3 additions & 5 deletions src/flamenco/runtime/tests/fd_exec_instr_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -698,7 +698,8 @@ _txn_context_create_and_exec( fd_exec_instr_test_runner_t * runner,
/* Provde default slot hashes of size 1 if not provided */
if( !slot_ctx->sysvar_cache->has_slot_hashes ) {
fd_slot_hash_t * slot_hashes = deq_fd_slot_hash_t_alloc( fd_scratch_virtual(), 1 );
memset( &slot_hashes[0], 0, sizeof(fd_slot_hash_t) );
fd_slot_hash_t * dummy_elem = deq_fd_slot_hash_t_push_tail_nocopy( slot_hashes );
memset( dummy_elem, 0, sizeof(fd_slot_hash_t) );
fd_slot_hashes_t default_slot_hashes = { .hashes = slot_hashes };
fd_sysvar_slot_hashes_init( slot_ctx, &default_slot_hashes );
}
Expand Down Expand Up @@ -1754,7 +1755,7 @@ fd_exec_vm_syscall_test_run( fd_exec_instr_test_runner_t * runner,
input_regions,
input_regions_count,
NULL,
(uchar)false );
input->vm_ctx.check_align );

// Setup the vm state for execution
if( fd_vm_setup_state_for_execution( vm ) != FD_VM_SUCCESS ) {
Expand All @@ -1776,9 +1777,6 @@ fd_exec_vm_syscall_test_run( fd_exec_instr_test_runner_t * runner,
vm->reg[10] = input->vm_ctx.r10;
vm->reg[11] = input->vm_ctx.r11;

vm->check_align = input->vm_ctx.check_align;
vm->check_size = input->vm_ctx.check_size;

// Override initial part of the heap, if specified the syscall fuzzer input
if( input->syscall_invocation.heap_prefix ) {
fd_memcpy( vm->heap, input->syscall_invocation.heap_prefix->bytes,
Expand Down
3 changes: 0 additions & 3 deletions src/flamenco/runtime/tests/fd_vm_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,9 +262,6 @@ do{
break;
}

vm->check_align = input->vm_ctx.check_align;
vm->check_size = input->vm_ctx.check_size;

if( input->syscall_invocation.stack_prefix ) {
uchar * stack = input->syscall_invocation.stack_prefix->bytes;
ulong stack_sz = fd_ulong_min(input->syscall_invocation.stack_prefix->size, FD_VM_STACK_MAX);
Expand Down
18 changes: 15 additions & 3 deletions src/flamenco/vm/fd_vm.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ struct fd_vm {
non-trivial use of instr_ctx). */

fd_exec_instr_ctx_t * instr_ctx; /* FIXME: DOCUMENT */
int check_align; /* If non-zero, the vm does alignment checks where necessary (syscalls) */
int check_size; /* If non-zero, the vm does size checks where necessary (syscalls) */

/* FIXME: frame_max should be run time configurable by compute budget.
If there is no reasonable upper bound on this, shadow and stack
Expand Down Expand Up @@ -198,7 +196,7 @@ FD_PROTOTYPES_BEGIN
integer power of 2. FOOTPRINT is a multiple of align.
These are provided to facilitate compile time declarations. */
#define FD_VM_ALIGN (8UL )
#define FD_VM_FOOTPRINT (789416UL)
#define FD_VM_FOOTPRINT (789408UL)

/* fd_vm_{align,footprint} give the needed alignment and footprint
of a memory region suitable to hold an fd_vm_t.
Expand Down Expand Up @@ -285,6 +283,20 @@ fd_vm_delete( void * shmem );
FD_FN_PURE int
fd_vm_validate( fd_vm_t const * vm );

/* fd_vm_is_check_align_enabled returns 1 if the vm should check alignment
when doing memory translation. */
FD_FN_PURE static inline int
fd_vm_is_check_align_enabled( fd_vm_t const * vm ) {
return !vm->is_deprecated;
}

/* fd_vm_is_check_size_enabled returns 1 if the vm should check size
when doing memory translation. */
FD_FN_PURE static inline int
fd_vm_is_check_size_enabled( fd_vm_t const * vm ) {
return !vm->is_deprecated;
}

/* FIXME: make this trace-aware, and move into fd_vm_init
This is a temporary hack to make the fuzz harness work. */
int
Expand Down
2 changes: 0 additions & 2 deletions src/flamenco/vm/fd_vm_interp.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ fd_vm_exec_notrace( fd_vm_t * vm ) {
if( FD_UNLIKELY( !vm ) ) return FD_VM_ERR_INVAL;

/* Pull out variables needed for the fd_vm_interp_core template */
int check_align = vm->check_align;
ulong frame_max = FD_VM_STACK_FRAME_MAX; /* FIXME: vm->frame_max to make this run-time configured */

ulong const * FD_RESTRICT text = vm->text;
Expand Down Expand Up @@ -49,7 +48,6 @@ fd_vm_exec_trace( fd_vm_t * vm ) {
if( FD_UNLIKELY( !vm ) ) return FD_VM_ERR_INVAL;

/* Pull out variables needed for the fd_vm_interp_core template */
int check_align = vm->check_align;
ulong frame_max = FD_VM_STACK_FRAME_MAX; /* FIXME: vm->frame_max to make this run-time configured */

ulong const * FD_RESTRICT text = vm->text;
Expand Down
27 changes: 9 additions & 18 deletions src/flamenco/vm/fd_vm_interp_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,8 +358,7 @@
ulong vaddr = reg_src + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uint), region_haddr, region_ld_sz, 0, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(uint) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
reg[ dst ] = fd_vm_mem_ld_4( vm, vaddr, haddr, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand All @@ -369,8 +368,7 @@
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uint), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(uint) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
fd_vm_mem_st_4( vm, vaddr, haddr, imm, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand All @@ -380,8 +378,7 @@
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(uint), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(uint) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
fd_vm_mem_st_4( vm, vaddr, haddr, (uint)reg_src, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand All @@ -403,8 +400,7 @@
ulong vaddr = reg_src + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ushort), region_haddr, region_ld_sz, 0, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(ushort) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
reg[ dst ] = fd_vm_mem_ld_2( vm, vaddr, haddr, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand All @@ -414,8 +410,7 @@
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ushort), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(ushort) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
fd_vm_mem_st_2( vm, vaddr, haddr, (ushort)imm, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand All @@ -425,8 +420,7 @@
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ushort), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(ushort) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
fd_vm_mem_st_2( vm, vaddr, haddr, (ushort)reg_src, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand Down Expand Up @@ -489,8 +483,7 @@
ulong vaddr = reg_src + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ulong), region_haddr, region_ld_sz, 0, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(ulong) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
reg[ dst ] = fd_vm_mem_ld_8( vm, vaddr, haddr, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand All @@ -500,8 +493,7 @@
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ulong), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(ulong) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus */
fd_vm_mem_st_8( vm, vaddr, haddr, (ulong)imm, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand All @@ -511,8 +503,7 @@
ulong vaddr = reg_dst + (ulong)(long)offset;
ulong haddr = fd_vm_mem_haddr( vm, vaddr, sizeof(ulong), region_haddr, region_st_sz, 1, 0UL, &is_multi_region );
int sigsegv = !haddr;
int sigbus = check_align & !fd_ulong_is_aligned( vaddr, sizeof(ulong) );
if( FD_UNLIKELY( sigsegv | sigbus ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
if( FD_UNLIKELY( sigsegv ) ) goto sigsegv; /* Note: untaken branches don't consume BTB */ /* FIXME: sigbus/rdonly */
fd_vm_mem_st_8( vm, vaddr, haddr, reg_src, is_multi_region );
}
FD_VM_INTERP_INSTR_END;
Expand Down
27 changes: 17 additions & 10 deletions src/flamenco/vm/fd_vm_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,20 @@
}
``` */

#define FD_VM_ALIGN_RUST_U8 (1UL)
#define FD_VM_ALIGN_RUST_U32 (4UL)
#define FD_VM_ALIGN_RUST_U64 (8UL)
#define FD_VM_ALIGN_RUST_U128 (16UL)
#define FD_VM_ALIGN_RUST_SLICE_U8_REF (8UL)
#define FD_VM_ALIGN_RUST_POD_U8_ARRAY (1UL)
#define FD_VM_ALIGN_RUST_PUBKEY (1UL)
#define FD_VM_ALIGN_RUST_U8 (1UL)
#define FD_VM_ALIGN_RUST_U32 (4UL)
#define FD_VM_ALIGN_RUST_I32 (4UL)
#define FD_VM_ALIGN_RUST_U64 (8UL)
#define FD_VM_ALIGN_RUST_U128 (16UL)
#define FD_VM_ALIGN_RUST_SLICE_U8_REF (8UL)
#define FD_VM_ALIGN_RUST_POD_U8_ARRAY (1UL)
#define FD_VM_ALIGN_RUST_PUBKEY (1UL)
#define FD_VM_ALIGN_RUST_SYSVAR_CLOCK (8UL)
#define FD_VM_ALIGN_RUST_SYSVAR_EPOCH_SCHEDULE (8UL)
#define FD_VM_ALIGN_RUST_SYSVAR_FEES (8UL)
#define FD_VM_ALIGN_RUST_SYSVAR_RENT (8UL)
#define FD_VM_ALIGN_RUST_SYSVAR_LAST_RESTART_SLOT (8UL)
#define FD_VM_ALIGN_RUST_STABLE_INSTRUCTION (8UL)

/* fd_vm_vec_t is the in-memory representation of a vector descriptor.
Equal in layout to the Rust slice header &[_] and various vector
Expand Down Expand Up @@ -499,7 +506,7 @@ static inline void fd_vm_mem_st_8( fd_vm_t const * vm,
fd_vm_t const * _vm = (vm); \
uchar _is_multi = 0; \
ulong _vaddr = (vaddr); \
int _sigbus = _vm->check_align & (!fd_ulong_is_aligned( _vaddr, (align) )); \
int _sigbus = fd_vm_is_check_align_enabled( vm ) & (!fd_ulong_is_aligned( _vaddr, (align) )); \
ulong _haddr = fd_vm_mem_haddr( vm, _vaddr, (sz), _vm->region_haddr, _vm->region_ld_sz, 0, 0UL, &_is_multi ); \
if( FD_UNLIKELY( (!_haddr) | _sigbus | _is_multi ) ) { \
FD_VM_ERR_FOR_LOG_EBPF( _vm, FD_VM_ERR_EBPF_ACCESS_VIOLATION ); \
Expand All @@ -520,7 +527,7 @@ static inline void fd_vm_mem_st_8( fd_vm_t const * vm,
fd_vm_t const * _vm = (vm); \
uchar _is_multi = 0; \
ulong _vaddr = (vaddr); \
int _sigbus = _vm->check_align & (!fd_ulong_is_aligned( _vaddr, (align) )); \
int _sigbus = fd_vm_is_check_align_enabled( vm ) & (!fd_ulong_is_aligned( _vaddr, (align) )); \
ulong _haddr = fd_vm_mem_haddr( vm, _vaddr, (sz), _vm->region_haddr, _vm->region_st_sz, 1, 0UL, &_is_multi ); \
if( FD_UNLIKELY( (!_haddr) | _sigbus | _is_multi) ) { \
FD_VM_ERR_FOR_LOG_EBPF( _vm, FD_VM_ERR_EBPF_ACCESS_VIOLATION ); \
Expand All @@ -533,7 +540,7 @@ static inline void fd_vm_mem_st_8( fd_vm_t const * vm,
fd_vm_t const * _vm = (vm); \
uchar _is_multi = 0; \
ulong _vaddr = (vaddr); \
int _sigbus = _vm->check_align & (!fd_ulong_is_aligned( _vaddr, (align) )); \
int _sigbus = fd_vm_is_check_align_enabled( vm ) & (!fd_ulong_is_aligned( _vaddr, (align) )); \
ulong _haddr = fd_vm_mem_haddr( vm, _vaddr, (sz), _vm->region_haddr, _vm->region_ld_sz, 0, 0UL, &_is_multi ); \
if( FD_UNLIKELY( (!_haddr) | _sigbus | _is_multi ) ) { \
FD_VM_ERR_FOR_LOG_EBPF( _vm, FD_VM_ERR_EBPF_ACCESS_VIOLATION ); \
Expand Down
2 changes: 1 addition & 1 deletion src/flamenco/vm/syscall/fd_vm_cpi.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ struct __attribute__((packed)) fd_vm_rust_instruction {
typedef struct fd_vm_rust_instruction fd_vm_rust_instruction_t;

#define FD_VM_RUST_ACCOUNT_META_SIZE (34UL)
#define FD_VM_RUST_ACCOUNT_META_ALIGN (8UL)
#define FD_VM_RUST_ACCOUNT_META_ALIGN (1UL)

struct __attribute__((packed)) fd_vm_rust_account_meta {
uchar pubkey[32];
Expand Down
8 changes: 0 additions & 8 deletions src/flamenco/vm/syscall/fd_vm_syscall_cpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,14 +504,6 @@ fd_vm_syscall_cpi_check_authorized_program( fd_pubkey_t const * program_id,
|| fd_vm_syscall_cpi_is_precompile(program_id));
}

/*
TODO: check_align is set wrong in the runtime, ensure that it is set correctly:
https://github.com/solana-labs/solana/blob/dbf06e258ae418097049e845035d7d5502fe1327/program-runtime/src/invoke_context.rs#L869-L881.
- Programs owned by the bpf_loader_deprecated should set this to false.
- All other programs should set this to true.
*/


/**********************************************************************
CROSS PROGRAM INVOCATION (C ABI)
**********************************************************************/
Expand Down
7 changes: 3 additions & 4 deletions src/flamenco/vm/syscall/fd_vm_syscall_cpi_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,7 @@ VM_SYCALL_CPI_UPDATE_CALLEE_ACC_FUNC( fd_vm_t * vm,
/* FIXME: double-check these permissions, especially the callee_acc_idx */

/* Translate and get the account data */
uchar const * caller_acc_data = FD_VM_MEM_HADDR_LD( vm, caller_acc_data_vm_addr,
sizeof(ulong), caller_acc_data_len );
uchar const * caller_acc_data = FD_VM_MEM_HADDR_LD( vm, caller_acc_data_vm_addr, sizeof(uchar), caller_acc_data_len );

if( fd_account_can_data_be_resized( vm->instr_ctx, callee_acc->meta, caller_acc_data_len, &err ) &&
fd_account_can_data_be_changed( vm->instr_ctx->instr, instr_acc_idx, &err ) ) {
Expand Down Expand Up @@ -237,7 +236,7 @@ VM_SYCALL_CPI_UPDATE_CALLEE_ACC_FUNC( fd_vm_t * vm,
smartly look up the right region and don't need to worry about
multiple region access.We just need to load in the bytes from
(original len, post_len]. */
uchar const * realloc_data = FD_VM_MEM_HADDR_LD( vm, caller_acc_data_vm_addr+original_len, alignof(ulong), realloc_bytes_used );
uchar const * realloc_data = FD_VM_MEM_HADDR_LD( vm, caller_acc_data_vm_addr+original_len, alignof(uchar), realloc_bytes_used );

uchar * data = NULL;
ulong dlen = 0UL;
Expand Down Expand Up @@ -628,7 +627,7 @@ VM_SYSCALL_CPI_ENTRYPOINT( void * _vm,

uchar const * data = FD_VM_MEM_SLICE_HADDR_LD(
vm, VM_SYSCALL_CPI_INSTR_DATA_ADDR( cpi_instruction ),
alignof(uchar),
FD_VM_ALIGN_RUST_U8,
VM_SYSCALL_CPI_INSTR_DATA_LEN( cpi_instruction ));

/* Authorized program check *************************************************/
Expand Down
Loading

0 comments on commit c09bd06

Please sign in to comment.