Skip to content

Commit

Permalink
v1.16: Fix - Adds missing "Executable account not owned by the BPF lo…
Browse files Browse the repository at this point in the history
…ader" error to `remove_bpf_loader_incorrect_program_id` (backport of #32695) (#32700)

Fix - Adds missing "Executable account not owned by the BPF loader" error to `remove_bpf_loader_incorrect_program_id` (#32695)

Adds missing "Executable account not owned by the BPF loader" error.

(cherry picked from commit b5a80a7)

Co-authored-by: Alexander Meißner <[email protected]>
  • Loading branch information
mergify[bot] and Lichtso authored Aug 3, 2023
1 parent 4ba1c2a commit ef598ee
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions programs/bpf_loader/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -494,11 +494,13 @@ fn process_instruction_inner(
transaction_context.get_key_of_account_at_index(index_in_transaction)
});
let program_id = instruction_context.get_last_program_key(transaction_context)?;
if first_account_key == program_id
|| second_account_key
.map(|key| key == program_id)
.unwrap_or(false)
let program_account_index = if first_account_key == program_id {
first_instruction_account
} else if second_account_key
.map(|key| key == program_id)
.unwrap_or(false)
{
first_instruction_account.saturating_add(1)
} else {
let first_account = try_borrow_account(
transaction_context,
Expand All @@ -509,6 +511,19 @@ fn process_instruction_inner(
ic_logger_msg!(log_collector, "BPF loader is executable");
return Err(Box::new(InstructionError::IncorrectProgramId));
}
first_instruction_account
};
let program = try_borrow_account(
transaction_context,
instruction_context,
program_account_index,
)?;
if program.is_executable() && !check_loader_id(program.get_owner()) {
ic_logger_msg!(
log_collector,
"Executable account not owned by the BPF loader"
);
return Err(Box::new(InstructionError::IncorrectProgramId));
}
}

Expand Down

0 comments on commit ef598ee

Please sign in to comment.