From ef17cf3bdbdc468a336a9d80da0c97260f02c4fe Mon Sep 17 00:00:00 2001 From: Jack May Date: Thu, 29 Jul 2021 15:03:00 -0700 Subject: [PATCH] Cleanup loader features (#18977) --- programs/bpf_loader/src/lib.rs | 5 +- programs/bpf_loader/src/syscalls.rs | 108 +++++++++++----------------- sdk/src/feature_set.rs | 25 ------- 3 files changed, 42 insertions(+), 96 deletions(-) diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index b3b4a7b973..5032592b54 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -31,7 +31,7 @@ use solana_sdk::{ bpf_loader_upgradeable::{self, UpgradeableLoaderState}, clock::Clock, entrypoint::{HEAP_LENGTH, SUCCESS}, - feature_set::{add_missing_program_error_mappings, upgradeable_close_instruction}, + feature_set::add_missing_program_error_mappings, ic_logger_msg, ic_msg, instruction::InstructionError, keyed_account::{from_keyed_account, keyed_account_at_index}, @@ -620,9 +620,6 @@ fn process_loader_upgradeable_instruction( ic_logger_msg!(logger, "New authority {:?}", new_authority); } UpgradeableLoaderInstruction::Close => { - if !invoke_context.is_feature_active(&upgradeable_close_instruction::id()) { - return Err(InstructionError::InvalidInstructionData); - } let close_account = keyed_account_at_index(keyed_accounts, 0)?; let recipient_account = keyed_account_at_index(keyed_accounts, 1)?; let authority = keyed_account_at_index(keyed_accounts, 2)?; diff --git a/programs/bpf_loader/src/syscalls.rs b/programs/bpf_loader/src/syscalls.rs index cfd1634a82..4683879de8 100644 --- a/programs/bpf_loader/src/syscalls.rs +++ b/programs/bpf_loader/src/syscalls.rs @@ -21,9 +21,8 @@ use solana_sdk::{ entrypoint::{MAX_PERMITTED_DATA_INCREASE, SUCCESS}, epoch_schedule::EpochSchedule, feature_set::{ - blake3_syscall_enabled, cpi_data_cost, enforce_aligned_host_addrs, - keccak256_syscall_enabled, libsecp256k1_0_5_upgrade_enabled, memory_ops_syscalls, - secp256k1_recover_syscall_enabled, sysvar_via_syscall, update_data_on_realloc, + blake3_syscall_enabled, enforce_aligned_host_addrs, libsecp256k1_0_5_upgrade_enabled, + memory_ops_syscalls, secp256k1_recover_syscall_enabled, }, hash::{Hasher, HASH_BYTES}, ic_msg, @@ -134,10 +133,7 @@ pub fn register_syscalls( )?; syscall_registry.register_syscall_by_name(b"sol_sha256", SyscallSha256::call)?; - - if invoke_context.is_feature_active(&keccak256_syscall_enabled::id()) { - syscall_registry.register_syscall_by_name(b"sol_keccak256", SyscallKeccak256::call)?; - } + syscall_registry.register_syscall_by_name(b"sol_keccak256", SyscallKeccak256::call)?; if invoke_context.is_feature_active(&secp256k1_recover_syscall_enabled::id()) { syscall_registry @@ -148,18 +144,16 @@ pub fn register_syscalls( syscall_registry.register_syscall_by_name(b"sol_blake3", SyscallBlake3::call)?; } - if invoke_context.is_feature_active(&sysvar_via_syscall::id()) { - syscall_registry - .register_syscall_by_name(b"sol_get_clock_sysvar", SyscallGetClockSysvar::call)?; - syscall_registry.register_syscall_by_name( - b"sol_get_epoch_schedule_sysvar", - SyscallGetEpochScheduleSysvar::call, - )?; - syscall_registry - .register_syscall_by_name(b"sol_get_fees_sysvar", SyscallGetFeesSysvar::call)?; - syscall_registry - .register_syscall_by_name(b"sol_get_rent_sysvar", SyscallGetRentSysvar::call)?; - } + syscall_registry + .register_syscall_by_name(b"sol_get_clock_sysvar", SyscallGetClockSysvar::call)?; + syscall_registry.register_syscall_by_name( + b"sol_get_epoch_schedule_sysvar", + SyscallGetEpochScheduleSysvar::call, + )?; + syscall_registry + .register_syscall_by_name(b"sol_get_fees_sysvar", SyscallGetFeesSysvar::call)?; + syscall_registry + .register_syscall_by_name(b"sol_get_rent_sysvar", SyscallGetRentSysvar::call)?; if invoke_context.is_feature_active(&memory_ops_syscalls::id()) { syscall_registry.register_syscall_by_name(b"sol_memcpy_", SyscallMemcpy::call)?; @@ -283,16 +277,15 @@ pub fn bind_syscall_context_objects<'a>( None, )?; - bind_feature_gated_syscall_context_object!( - vm, - invoke_context.is_feature_active(&keccak256_syscall_enabled::id()), + vm.bind_syscall_context_object( Box::new(SyscallKeccak256 { base_cost: compute_budget.sha256_base_cost, byte_cost: compute_budget.sha256_byte_cost, compute_meter: invoke_context.get_compute_meter(), loader_id, }), - ); + None, + )?; bind_feature_gated_syscall_context_object!( vm, @@ -353,42 +346,36 @@ pub fn bind_syscall_context_objects<'a>( }), ); - let is_sysvar_via_syscall_active = invoke_context.is_feature_active(&sysvar_via_syscall::id()); - let invoke_context = Rc::new(RefCell::new(invoke_context)); - bind_feature_gated_syscall_context_object!( - vm, - is_sysvar_via_syscall_active, + vm.bind_syscall_context_object( Box::new(SyscallGetClockSysvar { invoke_context: invoke_context.clone(), loader_id, }), - ); - bind_feature_gated_syscall_context_object!( - vm, - is_sysvar_via_syscall_active, + None, + )?; + vm.bind_syscall_context_object( Box::new(SyscallGetEpochScheduleSysvar { invoke_context: invoke_context.clone(), loader_id, }), - ); - bind_feature_gated_syscall_context_object!( - vm, - is_sysvar_via_syscall_active, + None, + )?; + vm.bind_syscall_context_object( Box::new(SyscallGetFeesSysvar { invoke_context: invoke_context.clone(), loader_id, }), - ); - bind_feature_gated_syscall_context_object!( - vm, - is_sysvar_via_syscall_active, + None, + )?; + vm.bind_syscall_context_object( Box::new(SyscallGetRentSysvar { invoke_context: invoke_context.clone(), loader_id, }), - ); + None, + )?; // Cross-program invocation syscalls vm.bind_syscall_context_object( @@ -1690,11 +1677,9 @@ impl<'a> SyscallInvokeSigned<'a> for SyscallInvokeSignedRust<'a> { enforce_aligned_host_addrs, )?; - if invoke_context.is_feature_active(&cpi_data_cost::id()) { - invoke_context.get_compute_meter().consume( - data.len() as u64 / invoke_context.get_compute_budget().cpi_bytes_per_unit, - )?; - } + invoke_context.get_compute_meter().consume( + data.len() as u64 / invoke_context.get_compute_budget().cpi_bytes_per_unit, + )?; let translated = translate( memory_mapping, @@ -2009,11 +1994,9 @@ impl<'a> SyscallInvokeSigned<'a> for SyscallInvokeSignedC<'a> { )?; let vm_data_addr = account_info.data_addr; - if invoke_context.is_feature_active(&cpi_data_cost::id()) { - invoke_context.get_compute_meter().consume( - account_info.data_len / invoke_context.get_compute_budget().cpi_bytes_per_unit, - )?; - } + invoke_context.get_compute_meter().consume( + account_info.data_len / invoke_context.get_compute_budget().cpi_bytes_per_unit, + )?; let data = translate_slice_mut::( memory_mapping, @@ -2440,22 +2423,13 @@ fn call<'a>( ) .into()); } - if invoke_context.is_feature_active(&update_data_on_realloc::id()) { - account_ref.data = translate_slice_mut::( - memory_mapping, - account_ref.vm_data_addr, - account.data().len() as u64, - &bpf_loader_deprecated::id(), // Don't care since it is byte aligned - true, - )?; - } else { - let _ = translate( - memory_mapping, - AccessType::Store, - account_ref.vm_data_addr, - account.data().len() as u64, - )?; - } + account_ref.data = translate_slice_mut::( + memory_mapping, + account_ref.vm_data_addr, + account.data().len() as u64, + &bpf_loader_deprecated::id(), // Don't care since it is byte aligned + true, + )?; *account_ref.ref_to_len_in_vm = account.data().len() as u64; *account_ref.serialized_len_ptr = account.data().len() as u64; } diff --git a/sdk/src/feature_set.rs b/sdk/src/feature_set.rs index 01005912c0..f1597e0261 100644 --- a/sdk/src/feature_set.rs +++ b/sdk/src/feature_set.rs @@ -107,30 +107,10 @@ pub mod require_stake_for_gossip { solana_sdk::declare_id!("6oNzd5Z3M2L1xo4Q5hoox7CR2DuW7m1ETLWH5jHJthwa"); } -pub mod cpi_data_cost { - solana_sdk::declare_id!("Hrg5bXePPGiAVWZfDHbvjqytSeyBDPAGAQ7v6N5i4gCX"); -} - -pub mod upgradeable_close_instruction { - solana_sdk::declare_id!("FsPaByos3gA9bUEhp3EimQpQPCoSvCEigHod496NmABQ"); -} - -pub mod sysvar_via_syscall { - solana_sdk::declare_id!("7411E6gFQLDhQkdRjmpXwM1hzHMMoYQUjHicmvGPC1Nf"); -} - pub mod enforce_aligned_host_addrs { solana_sdk::declare_id!("6Qob9Z4RwGdf599FDVCqsjuKjR8ZFR3oVs2ByRLWBsua"); } -pub mod update_data_on_realloc { - solana_sdk::declare_id!("BkPcYCrwHXBoTsv9vMhiRF9gteZmDj3Uwisz9CDjoMKp"); -} - -pub mod keccak256_syscall_enabled { - solana_sdk::declare_id!("7Ua8mFtahVfA3WCY9LoXDAJJdvJRJHckvSSr1dD8FTWc"); -} - pub mod stake_program_v4 { solana_sdk::declare_id!("Dc7djyhP9aLfdq2zktpvskeAjpG56msCU1yexpxXiWZb"); } @@ -217,12 +197,7 @@ lazy_static! { (check_init_vote_data::id(), "check initialized Vote data"), (check_program_owner::id(), "limit programs to operating on accounts owned by itself"), (require_stake_for_gossip::id(), "require stakes for propagating crds values through gossip #15561"), - (cpi_data_cost::id(), "charge the compute budget for data passed via CPI"), - (upgradeable_close_instruction::id(), "close upgradeable buffer accounts"), - (sysvar_via_syscall::id(), "provide sysvars via syscalls"), (enforce_aligned_host_addrs::id(), "enforce aligned host addresses"), - (update_data_on_realloc::id(), "Retain updated data values modified after realloc via CPI"), - (keccak256_syscall_enabled::id(), "keccak256 syscall"), (stake_program_v4::id(), "solana_stake_program v4"), (memory_ops_syscalls::id(), "add syscalls for memory operations"), (secp256k1_recover_syscall_enabled::id(), "secp256k1_recover syscall"),