Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Cleanup - Feature gate of move_serialized_len_ptr_in_cpi #34082

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -242,12 +226,7 @@ impl<'a, 'b> CallerAccount<'a, 'b> {
invoke_context.get_check_size(),
)?
};
(
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 @@ -257,7 +236,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 @@ -378,29 +356,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 @@ -1609,23 +1571,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 @@ -2831,7 +2784,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