diff --git a/programs/bpf_loader/src/syscalls.rs b/programs/bpf_loader/src/syscalls.rs index 4f23d1890a..5d7ad87474 100644 --- a/programs/bpf_loader/src/syscalls.rs +++ b/programs/bpf_loader/src/syscalls.rs @@ -365,10 +365,10 @@ pub fn syscall_create_program_address( ) }) .collect::, EbpfError>>()?; - let program_id = translate_type!(Pubkey, program_id_addr, rw_regions)?; + let program_id = translate_type!(Pubkey, program_id_addr, ro_regions)?; let new_address = Pubkey::create_program_address(&seeds, program_id).map_err(SyscallError::BadSeeds)?; - let address = translate_slice_mut!(u8, address_addr, 32, ro_regions)?; + let address = translate_slice_mut!(u8, address_addr, 32, rw_regions)?; address.copy_from_slice(new_address.as_ref()); Ok(0) } diff --git a/sdk/src/pubkey.rs b/sdk/src/pubkey.rs index c6a69c4f8e..3807ea502c 100644 --- a/sdk/src/pubkey.rs +++ b/sdk/src/pubkey.rs @@ -139,16 +139,13 @@ impl Pubkey { address_bytes_addr: *const u8, ) -> u64; }; - let bytes = [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - ]; + let mut bytes = [0; 32]; let result = unsafe { sol_create_program_address( seeds as *const _ as *const u8, seeds.len() as u64, program_id as *const _ as *const u8, - &bytes as *const _ as *const u8, + &mut bytes as *mut _ as *mut u8, ) }; match result {