Skip to content

Commit

Permalink
Cleanup - Feature gate of move_serialized_len_ptr_in_cpi (solana-la…
Browse files Browse the repository at this point in the history
…bs#34082)

Cleans up feature gate of move_serialized_len_ptr_in_cpi.
  • Loading branch information
Lichtso authored Nov 15, 2023
1 parent b168cad commit 7ea4b2d
Showing 1 changed file with 10 additions and 58 deletions.
68 changes: 10 additions & 58 deletions programs/bpf_loader/src/syscalls/cpi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ struct CallerAccount<'a, 'b> {
// the pointer field and ref_to_len_in_vm points to the length field.
vm_data_addr: u64,
ref_to_len_in_vm: VmValue<'b, 'a, u64>,
// To be removed once `feature_set::move_serialized_len_ptr_in_cpi` is active everywhere
serialized_len_ptr: *mut u64,
executable: bool,
rent_epoch: u64,
}
Expand Down Expand Up @@ -156,7 +154,7 @@ impl<'a, 'b> CallerAccount<'a, 'b> {
invoke_context.get_check_aligned(),
)?;

let (serialized_data, vm_data_addr, ref_to_len_in_vm, serialized_len_ptr) = {
let (serialized_data, vm_data_addr, ref_to_len_in_vm) = {
// Double translate data out of RefCell
let data = *translate_type::<&[u8]>(
memory_mapping,
Expand Down Expand Up @@ -203,20 +201,6 @@ impl<'a, 'b> CallerAccount<'a, 'b> {
)? as *mut u64;
VmValue::Translated(unsafe { &mut *translated })
};
let serialized_len_ptr = if invoke_context
.feature_set
.is_active(&feature_set::move_serialized_len_ptr_in_cpi::id())
{
std::ptr::null_mut()
} else {
let ref_of_len_in_input_buffer =
(data.as_ptr() as *const _ as u64).saturating_sub(8);
translate_type_mut::<u64>(
memory_mapping,
ref_of_len_in_input_buffer,
invoke_context.get_check_aligned(),
)?
};
let vm_data_addr = data.as_ptr() as u64;

let serialized_data = if direct_mapping {
Expand All @@ -241,12 +225,7 @@ impl<'a, 'b> CallerAccount<'a, 'b> {
invoke_context.get_check_aligned(),
)?
};
(
serialized_data,
vm_data_addr,
ref_to_len_in_vm,
serialized_len_ptr,
)
(serialized_data, vm_data_addr, ref_to_len_in_vm)
};

Ok(CallerAccount {
Expand All @@ -256,7 +235,6 @@ impl<'a, 'b> CallerAccount<'a, 'b> {
serialized_data,
vm_data_addr,
ref_to_len_in_vm,
serialized_len_ptr,
executable: if is_disable_cpi_setting_executable_and_rent_epoch_active {
false
} else {
Expand Down Expand Up @@ -376,29 +354,13 @@ impl<'a, 'b> CallerAccount<'a, 'b> {
VmValue::Translated(unsafe { &mut *(data_len_addr as *mut u64) })
};

let ref_of_len_in_input_buffer =
(account_info.data_addr as *mut u8 as u64).saturating_sub(8);
let serialized_len_ptr = if invoke_context
.feature_set
.is_active(&feature_set::move_serialized_len_ptr_in_cpi::id())
{
std::ptr::null_mut()
} else {
translate_type_mut::<u64>(
memory_mapping,
ref_of_len_in_input_buffer,
invoke_context.get_check_aligned(),
)?
};

Ok(CallerAccount {
lamports,
owner,
original_data_len: account_metadata.original_data_len,
serialized_data,
vm_data_addr: account_info.data_addr,
ref_to_len_in_vm,
serialized_len_ptr,
executable: if is_disable_cpi_setting_executable_and_rent_epoch_active {
false
} else {
Expand Down Expand Up @@ -1593,23 +1555,14 @@ fn update_caller_account(
*caller_account.ref_to_len_in_vm.get_mut()? = post_len as u64;

// this is the len field in the serialized parameters
if invoke_context
.feature_set
.is_active(&feature_set::move_serialized_len_ptr_in_cpi::id())
{
let serialized_len_ptr = translate_type_mut::<u64>(
memory_mapping,
caller_account
.vm_data_addr
.saturating_sub(std::mem::size_of::<u64>() as u64),
invoke_context.get_check_aligned(),
)?;
*serialized_len_ptr = post_len as u64;
} else {
unsafe {
*caller_account.serialized_len_ptr = post_len as u64;
}
}
let serialized_len_ptr = translate_type_mut::<u64>(
memory_mapping,
caller_account
.vm_data_addr
.saturating_sub(std::mem::size_of::<u64>() as u64),
invoke_context.get_check_aligned(),
)?;
*serialized_len_ptr = post_len as u64;
}
if !direct_mapping {
let to_slice = &mut caller_account.serialized_data;
Expand Down Expand Up @@ -2805,7 +2758,6 @@ mod tests {
serialized_data: data,
vm_data_addr: self.vm_addr + mem::size_of::<u64>() as u64,
ref_to_len_in_vm: VmValue::Translated(&mut self.len),
serialized_len_ptr: std::ptr::null_mut(),
executable: false,
rent_epoch: 0,
}
Expand Down

0 comments on commit 7ea4b2d

Please sign in to comment.