Enforce host aligned memory for program regions (#16590)
This commit is contained in:
@@ -17,7 +17,8 @@ use crate::{
|
||||
use log::{log_enabled, trace, Level::Trace};
|
||||
use solana_measure::measure::Measure;
|
||||
use solana_rbpf::{
|
||||
ebpf::MM_HEAP_START,
|
||||
aligned_memory::AlignedMemory,
|
||||
ebpf::{HOST_ALIGN, MM_HEAP_START},
|
||||
error::{EbpfError, UserDefinedError},
|
||||
memory_region::MemoryRegion,
|
||||
vm::{Config, EbpfVm, Executable, InstructionMeter},
|
||||
@@ -147,8 +148,8 @@ pub fn create_vm<'a>(
|
||||
parameter_bytes: &mut [u8],
|
||||
invoke_context: &'a mut dyn InvokeContext,
|
||||
) -> Result<EbpfVm<'a, BpfError, ThisInstructionMeter>, EbpfError<BpfError>> {
|
||||
let heap = vec![0_u8; DEFAULT_HEAP_SIZE];
|
||||
let heap_region = MemoryRegion::new_from_slice(&heap, MM_HEAP_START, 0, true);
|
||||
let heap = AlignedMemory::new(DEFAULT_HEAP_SIZE, HOST_ALIGN);
|
||||
let heap_region = MemoryRegion::new_from_slice(heap.as_slice(), MM_HEAP_START, 0, true);
|
||||
let mut vm = EbpfVm::new(program, parameter_bytes, &[heap_region])?;
|
||||
syscalls::bind_syscall_context_objects(loader_id, &mut vm, invoke_context, heap)?;
|
||||
Ok(vm)
|
||||
@@ -759,7 +760,7 @@ impl Executor for BpfExecutor {
|
||||
let mut vm = match create_vm(
|
||||
loader_id,
|
||||
self.executable.as_ref(),
|
||||
&mut parameter_bytes,
|
||||
parameter_bytes.as_slice_mut(),
|
||||
invoke_context,
|
||||
) {
|
||||
Ok(info) => info,
|
||||
@@ -823,7 +824,7 @@ impl Executor for BpfExecutor {
|
||||
deserialize_parameters(
|
||||
loader_id,
|
||||
keyed_accounts,
|
||||
¶meter_bytes,
|
||||
parameter_bytes.as_slice(),
|
||||
invoke_context.is_feature_active(&skip_ro_deserialization::id()),
|
||||
)?;
|
||||
deserialize_time.stop();
|
||||
|
Reference in New Issue
Block a user