Skip to content

Commit

Permalink
feat: additional reentrancy protection for EPM and SM
Browse files Browse the repository at this point in the history
  • Loading branch information
wadealexc committed Feb 14, 2025
1 parent a5bbe9c commit 07059e0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 13 deletions.
17 changes: 10 additions & 7 deletions src/contracts/core/StrategyManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ contract StrategyManager is
address staker,
IStrategy strategy,
uint256 depositSharesToRemove
) external onlyDelegationManager returns (uint256) {
) external onlyDelegationManager nonReentrant returns (uint256) {
(, uint256 sharesAfter) = _removeDepositShares(staker, strategy, depositSharesToRemove);
return sharesAfter;
}
Expand All @@ -126,7 +126,7 @@ contract StrategyManager is
address staker,
IStrategy strategy,
uint256 shares
) external onlyDelegationManager returns (uint256, uint256) {
) external onlyDelegationManager nonReentrant returns (uint256, uint256) {
return _addShares(staker, strategy, shares);
}

Expand All @@ -136,12 +136,15 @@ contract StrategyManager is
IStrategy strategy,
IERC20 token,
uint256 shares
) external onlyDelegationManager {
) external onlyDelegationManager nonReentrant {
strategy.withdraw(staker, token, shares);
}

/// @inheritdoc IShareManager
function increaseBurnableShares(IStrategy strategy, uint256 addedSharesToBurn) external onlyDelegationManager {
function increaseBurnableShares(
IStrategy strategy,
uint256 addedSharesToBurn
) external onlyDelegationManager nonReentrant {
(, uint256 currentShares) = EnumerableMap.tryGet(burnableShares, address(strategy));
EnumerableMap.set(burnableShares, address(strategy), currentShares + addedSharesToBurn);
emit BurnableSharesIncreased(strategy, addedSharesToBurn);
Expand All @@ -161,14 +164,14 @@ contract StrategyManager is
/// @inheritdoc IStrategyManager
function setStrategyWhitelister(
address newStrategyWhitelister
) external onlyOwner {
) external onlyOwner nonReentrant {
_setStrategyWhitelister(newStrategyWhitelister);
}

/// @inheritdoc IStrategyManager
function addStrategiesToDepositWhitelist(
IStrategy[] calldata strategiesToWhitelist
) external onlyStrategyWhitelister {
) external onlyStrategyWhitelister nonReentrant {
uint256 strategiesToWhitelistLength = strategiesToWhitelist.length;
for (uint256 i = 0; i < strategiesToWhitelistLength; ++i) {
// change storage and emit event only if strategy is not already in whitelist
Expand All @@ -182,7 +185,7 @@ contract StrategyManager is
/// @inheritdoc IStrategyManager
function removeStrategiesFromDepositWhitelist(
IStrategy[] calldata strategiesToRemoveFromWhitelist
) external onlyStrategyWhitelister {
) external onlyStrategyWhitelister nonReentrant {
uint256 strategiesToRemoveFromWhitelistLength = strategiesToRemoveFromWhitelist.length;
for (uint256 i = 0; i < strategiesToRemoveFromWhitelistLength; ++i) {
// change storage and emit event only if strategy is already in whitelist
Expand Down
12 changes: 6 additions & 6 deletions src/contracts/pods/EigenPodManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ contract EigenPodManager is
}

/// @inheritdoc IEigenPodManager
function createPod() external onlyWhenNotPaused(PAUSED_NEW_EIGENPODS) returns (address) {
function createPod() external onlyWhenNotPaused(PAUSED_NEW_EIGENPODS) nonReentrant returns (address) {
require(!hasPod(msg.sender), EigenPodAlreadyExists());
// deploy a pod if the sender doesn't have one already
IEigenPod pod = _deployPod();
Expand All @@ -72,7 +72,7 @@ contract EigenPodManager is
bytes calldata pubkey,
bytes calldata signature,
bytes32 depositDataRoot
) external payable onlyWhenNotPaused(PAUSED_NEW_EIGENPODS) {
) external payable onlyWhenNotPaused(PAUSED_NEW_EIGENPODS) nonReentrant {
IEigenPod pod = ownerToPod[msg.sender];
if (address(pod) == address(0)) {
//deploy a pod if the sender doesn't have one already
Expand Down Expand Up @@ -141,7 +141,7 @@ contract EigenPodManager is
address staker,
IStrategy strategy,
uint256 depositSharesToRemove
) external onlyDelegationManager returns (uint256) {
) external onlyDelegationManager nonReentrant returns (uint256) {
require(strategy == beaconChainETHStrategy, InvalidStrategy());
int256 updatedShares = podOwnerDepositShares[staker] - int256(depositSharesToRemove);
require(updatedShares >= 0, SharesNegative());
Expand All @@ -162,7 +162,7 @@ contract EigenPodManager is
address staker,
IStrategy strategy,
uint256 shares
) external onlyDelegationManager returns (uint256, uint256) {
) external onlyDelegationManager nonReentrant returns (uint256, uint256) {
require(strategy == beaconChainETHStrategy, InvalidStrategy());
return _addShares(staker, shares);
}
Expand All @@ -178,7 +178,7 @@ contract EigenPodManager is
IStrategy strategy,
IERC20,
uint256 shares
) external onlyDelegationManager {
) external onlyDelegationManager nonReentrant {
require(strategy == beaconChainETHStrategy, InvalidStrategy());
require(staker != address(0), InputAddressZero());
require(int256(shares) > 0, SharesNegative());
Expand Down Expand Up @@ -219,7 +219,7 @@ contract EigenPodManager is
}

/// @inheritdoc IShareManager
function increaseBurnableShares(IStrategy, uint256 addedSharesToBurn) external onlyDelegationManager {
function increaseBurnableShares(IStrategy, uint256 addedSharesToBurn) external onlyDelegationManager nonReentrant {
burnableETHShares += addedSharesToBurn;
emit BurnableETHSharesIncreased(addedSharesToBurn);
}
Expand Down

0 comments on commit 07059e0

Please sign in to comment.