Skip to content

Commit

Permalink
Disconnect on Message Over 10MB (hyperledger#2485)
Browse files Browse the repository at this point in the history
Signed-off-by: Ratan Rai Sur <ratan.r.sur@gmail.com>
  • Loading branch information
RatanRSur committed Jul 7, 2021
1 parent 55d2fb3 commit 383a374
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 6 deletions.
8 changes: 2 additions & 6 deletions besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -2351,12 +2351,8 @@ private void addShutdownHook(final Runner runner) {
// Loopback IP is used by default as this is how smokeTests require it to be
// and it's probably a good security behaviour to default only on the localhost.
private InetAddress autoDiscoverDefaultIP() {

if (autoDiscoveredDefaultIP != null) {
return autoDiscoveredDefaultIP;
}

autoDiscoveredDefaultIP = InetAddress.getLoopbackAddress();
autoDiscoveredDefaultIP =
Optional.ofNullable(autoDiscoveredDefaultIP).orElseGet(InetAddress::getLoopbackAddress);

return autoDiscoveredDefaultIP;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,11 @@ public void processMessage(final Capability cap, final Message message) {
return;
}

if (message.getData().getSize() > 10 * 1_000_000 /*10MB*/) {
LOG.debug("Received message over 10MB. Disconnecting from {}", peer);
peer.disconnect(DisconnectReason.BREACH_OF_PROTOCOL);
}

// Handle STATUS processing
if (message.getData().getCode() == EthPV62.STATUS) {
handleStatusMessage(peer, message.getData());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;

import org.hyperledger.besu.ethereum.ProtocolContext;
import org.hyperledger.besu.ethereum.chain.Blockchain;
Expand Down Expand Up @@ -180,6 +181,25 @@ public void disconnectOnWrongChainId() {
}
}

@Test
public void disconnectOnVeryLargeMessage() {
try (final EthProtocolManager ethManager =
EthProtocolManagerTestUtil.create(
blockchain,
() -> false,
protocolContext.getWorldStateArchive(),
transactionPool,
EthProtocolConfiguration.defaultConfig())) {
final MessageData messageData = mock(MessageData.class);
when(messageData.getSize()).thenReturn(10 * 1_000_000 + 1 /* just over 10MB*/);
when(messageData.getCode()).thenReturn(EthPV62.TRANSACTIONS);
final MockPeerConnection peer = setupPeer(ethManager, (cap, msg, conn) -> {});

ethManager.processMessage(EthProtocol.ETH63, new DefaultMessage(peer, messageData));
assertThat(peer.isDisconnected()).isTrue();
}
}

@Test
public void disconnectOnWrongGenesisHash() {
try (final EthProtocolManager ethManager =
Expand Down

0 comments on commit 383a374

Please sign in to comment.