(cherry picked from commit 0b479ab180
)
Co-authored-by: Jack May <jack@solana.com>
This commit is contained in:
@ -1243,6 +1243,7 @@ fn test_program_bpf_test_use_latest_executor() {
|
|||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[ignore] // Invoking BPF loaders from CPI not allowed
|
||||||
#[cfg(feature = "bpf_rust")]
|
#[cfg(feature = "bpf_rust")]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_program_bpf_test_use_latest_executor2() {
|
fn test_program_bpf_test_use_latest_executor2() {
|
||||||
|
@ -12,7 +12,7 @@ use solana_sdk::{
|
|||||||
account::Account,
|
account::Account,
|
||||||
account_info::AccountInfo,
|
account_info::AccountInfo,
|
||||||
account_utils::StateMut,
|
account_utils::StateMut,
|
||||||
bpf_loader_deprecated,
|
bpf_loader, bpf_loader_deprecated,
|
||||||
bpf_loader_upgradeable::{self, UpgradeableLoaderState},
|
bpf_loader_upgradeable::{self, UpgradeableLoaderState},
|
||||||
entrypoint::{MAX_PERMITTED_DATA_INCREASE, SUCCESS},
|
entrypoint::{MAX_PERMITTED_DATA_INCREASE, SUCCESS},
|
||||||
feature_set::{
|
feature_set::{
|
||||||
@ -23,6 +23,7 @@ use solana_sdk::{
|
|||||||
instruction::{AccountMeta, Instruction, InstructionError},
|
instruction::{AccountMeta, Instruction, InstructionError},
|
||||||
keyed_account::KeyedAccount,
|
keyed_account::KeyedAccount,
|
||||||
message::Message,
|
message::Message,
|
||||||
|
native_loader,
|
||||||
process_instruction::{stable_log, ComputeMeter, InvokeContext, Logger},
|
process_instruction::{stable_log, ComputeMeter, InvokeContext, Logger},
|
||||||
program_error::ProgramError,
|
program_error::ProgramError,
|
||||||
pubkey::{Pubkey, PubkeyError, MAX_SEEDS},
|
pubkey::{Pubkey, PubkeyError, MAX_SEEDS},
|
||||||
@ -1160,6 +1161,17 @@ impl<'a> SyscallObject<BPFError> for SyscallInvokeSignedC<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_authorized_program(program_id: &Pubkey) -> Result<(), EbpfError<BPFError>> {
|
||||||
|
if native_loader::check_id(program_id)
|
||||||
|
|| bpf_loader::check_id(program_id)
|
||||||
|
|| bpf_loader_deprecated::check_id(program_id)
|
||||||
|
|| bpf_loader_upgradeable::check_id(program_id)
|
||||||
|
{
|
||||||
|
return Err(SyscallError::InstructionError(InstructionError::UnsupportedProgramId).into());
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Call process instruction, common to both Rust and C
|
/// Call process instruction, common to both Rust and C
|
||||||
fn call<'a>(
|
fn call<'a>(
|
||||||
syscall: &mut dyn SyscallInvokeSigned<'a>,
|
syscall: &mut dyn SyscallInvokeSigned<'a>,
|
||||||
@ -1195,6 +1207,7 @@ fn call<'a>(
|
|||||||
let (message, callee_program_id) =
|
let (message, callee_program_id) =
|
||||||
MessageProcessor::create_message(&instruction, &keyed_account_refs, &signers)
|
MessageProcessor::create_message(&instruction, &keyed_account_refs, &signers)
|
||||||
.map_err(SyscallError::InstructionError)?;
|
.map_err(SyscallError::InstructionError)?;
|
||||||
|
is_authorized_program(&callee_program_id)?;
|
||||||
let (accounts, account_refs) = syscall.translate_accounts(
|
let (accounts, account_refs) = syscall.translate_accounts(
|
||||||
&message,
|
&message,
|
||||||
account_infos_addr,
|
account_infos_addr,
|
||||||
|
Reference in New Issue
Block a user