Enforce host aligned memory for program regions (#16590)

This commit is contained in:
Jack May
2021-04-20 11:07:30 -07:00
committed by GitHub
parent 8e69dd42c1
commit 08d5253651
12 changed files with 399 additions and 127 deletions

View File

@@ -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,
&parameter_bytes,
parameter_bytes.as_slice(),
invoke_context.is_feature_active(&skip_ro_deserialization::id()),
)?;
deserialize_time.stop();