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

Commit e6d4907

Browse files
authored
Do not overwrite builtin program in the same slot (#31718)
1 parent fb09cba commit e6d4907

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

program-runtime/src/loaded_programs.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -427,10 +427,7 @@ impl LoadedPrograms {
427427
if existing.deployment_slot == entry.deployment_slot
428428
&& existing.effective_slot == entry.effective_slot
429429
{
430-
if matches!(existing.program, LoadedProgramType::Builtin(_)) {
431-
// Allow built-ins to be overwritten
432-
second_level.swap_remove(entry_index);
433-
} else if matches!(existing.program, LoadedProgramType::Unloaded) {
430+
if matches!(existing.program, LoadedProgramType::Unloaded) {
434431
// The unloaded program is getting reloaded
435432
// Copy over the usage counter to the new entry
436433
entry.usage_counter.store(

runtime/src/bank.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7315,7 +7315,7 @@ impl Bank {
73157315
self.add_builtin(
73167316
program_id,
73177317
"mockup".to_string(),
7318-
LoadedProgram::new_builtin(0, 0, entrypoint),
7318+
LoadedProgram::new_builtin(self.slot, 0, entrypoint),
73197319
);
73207320
}
73217321

runtime/src/bank/tests.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4857,7 +4857,7 @@ fn test_add_duplicate_static_program() {
48574857
mint_keypair,
48584858
..
48594859
} = create_genesis_config_with_leader(500, &solana_sdk::pubkey::new_rand(), 0);
4860-
let mut bank = Bank::new_for_tests(&genesis_config);
4860+
let bank = Bank::new_for_tests(&genesis_config);
48614861

48624862
declare_process_instruction!(process_instruction, 1, |_invoke_context| {
48634863
Err(InstructionError::Custom(42))
@@ -4886,6 +4886,9 @@ fn test_add_duplicate_static_program() {
48864886
bank.last_blockhash(),
48874887
);
48884888

4889+
let slot = bank.slot().saturating_add(1);
4890+
let mut bank = Bank::new_from_parent(&Arc::new(bank), &Pubkey::default(), slot);
4891+
48894892
let vote_loader_account = bank.get_account(&solana_vote_program::id()).unwrap();
48904893
bank.add_mockup_builtin(solana_vote_program::id(), process_instruction);
48914894
let new_vote_loader_account = bank.get_account(&solana_vote_program::id()).unwrap();
@@ -6290,7 +6293,7 @@ fn test_transaction_with_program_ids_passed_to_programs() {
62906293
fn test_account_ids_after_program_ids() {
62916294
solana_logger::setup();
62926295
let (genesis_config, mint_keypair) = create_genesis_config(500);
6293-
let mut bank = Bank::new_for_tests(&genesis_config);
6296+
let bank = Bank::new_for_tests(&genesis_config);
62946297

62956298
let from_pubkey = solana_sdk::pubkey::new_rand();
62966299
let to_pubkey = solana_sdk::pubkey::new_rand();
@@ -6310,6 +6313,9 @@ fn test_account_ids_after_program_ids() {
63106313

63116314
tx.message.account_keys.push(solana_sdk::pubkey::new_rand());
63126315

6316+
let slot = bank.slot().saturating_add(1);
6317+
let mut bank = Bank::new_from_parent(&Arc::new(bank), &Pubkey::default(), slot);
6318+
63136319
bank.add_mockup_builtin(solana_vote_program::id(), process_instruction);
63146320
let result = bank.process_transaction(&tx);
63156321
assert_eq!(result, Ok(()));
@@ -6455,7 +6461,7 @@ fn test_program_id_as_payer() {
64556461
#[test]
64566462
fn test_ref_account_key_after_program_id() {
64576463
let (genesis_config, mint_keypair) = create_genesis_config(500);
6458-
let mut bank = Bank::new_for_tests(&genesis_config);
6464+
let bank = Bank::new_for_tests(&genesis_config);
64596465

64606466
let from_pubkey = solana_sdk::pubkey::new_rand();
64616467
let to_pubkey = solana_sdk::pubkey::new_rand();
@@ -6465,6 +6471,9 @@ fn test_ref_account_key_after_program_id() {
64656471
AccountMeta::new(to_pubkey, false),
64666472
];
64676473

6474+
let slot = bank.slot().saturating_add(1);
6475+
let mut bank = Bank::new_from_parent(&Arc::new(bank), &Pubkey::default(), slot);
6476+
64686477
bank.add_mockup_builtin(solana_vote_program::id(), process_instruction);
64696478

64706479
let instruction = Instruction::new_with_bincode(solana_vote_program::id(), &10, account_metas);

0 commit comments

Comments
 (0)