diff --git a/programs/stake/src/stake_state.rs b/programs/stake/src/stake_state.rs index 19b148b459..4984c66bad 100644 --- a/programs/stake/src/stake_state.rs +++ b/programs/stake/src/stake_state.rs @@ -1158,7 +1158,7 @@ impl<'a> StakeAccount for KeyedAccount<'a> { split .try_account_ref_mut()? .checked_add_lamports(lamports)?; - self.try_account_ref_mut()?.lamports -= lamports; + self.try_account_ref_mut()?.checked_sub_lamports(lamports)?; Ok(()) } else { Err(InstructionError::InvalidAccountData) @@ -1204,7 +1204,9 @@ impl<'a> StakeAccount for KeyedAccount<'a> { // Drain the source stake account let lamports = source_account.lamports()?; - source_account.try_account_ref_mut()?.lamports -= lamports; + source_account + .try_account_ref_mut()? + .checked_sub_lamports(lamports)?; self.try_account_ref_mut()?.checked_add_lamports(lamports)?; Ok(()) } @@ -1285,7 +1287,7 @@ impl<'a> StakeAccount for KeyedAccount<'a> { self.set_state(&StakeState::Uninitialized)?; } - self.try_account_ref_mut()?.lamports -= lamports; + self.try_account_ref_mut()?.checked_sub_lamports(lamports)?; to.try_account_ref_mut()?.checked_add_lamports(lamports)?; Ok(()) } diff --git a/runtime/src/system_instruction_processor.rs b/runtime/src/system_instruction_processor.rs index 74236ba5dd..28b84a8521 100644 --- a/runtime/src/system_instruction_processor.rs +++ b/runtime/src/system_instruction_processor.rs @@ -189,7 +189,7 @@ fn transfer_verified( return Err(SystemError::ResultWithNegativeLamports.into()); } - from.try_account_ref_mut()?.lamports -= lamports; + from.try_account_ref_mut()?.checked_sub_lamports(lamports)?; to.try_account_ref_mut()?.checked_add_lamports(lamports)?; Ok(()) }