-
Notifications
You must be signed in to change notification settings - Fork 995
Open
Description
Problem
When processing peer discovery packets, org.apache.tuweni.rlp.EndOfRLPException is not caught as a packet decoding issue and is instead logged as an error. This exception indicates a malformed RLP-encoded packet and should be discarded quietly like other decoding exceptions.
Stack Trace
org.apache.tuweni.rlp.EndOfRLPException: End of RLP source reached
at org.apache.tuweni.rlp.BytesRLPReader.readValue(BytesRLPReader.java:38)
at org.apache.tuweni.rlp.RLPReader.readValue(RLPReader.java:38)
at org.ethereum.beacon.discovery.schema.NodeRecordFactory.lambda$fromRlp$0(NodeRecordFactory.java:79)
at org.apache.tuweni.rlp.BytesRLPReader.readList(BytesRLPReader.java:114)
at org.apache.tuweni.rlp.RLPReader.readList(RLPReader.java:280)
at org.ethereum.beacon.discovery.schema.NodeRecordFactory.fromRlp(NodeRecordFactory.java:77)
at org.apache.tuweni.rlp.RLP.decode(RLP.java:262)
at org.apache.tuweni.rlp.RLP.decode(RLP.java:242)
at org.ethereum.beacon.discovery.schema.NodeRecordFactory.fromBytes(NodeRecordFactory.java:137)
at org.ethereum.beacon.discovery.schema.NodeRecordFactory.fromBytes(NodeRecordFactory.java:73)
at org.hyperledger.besu.ethereum.p2p.discovery.internal.packet.enrresponse.EnrResponsePacketDataRlpReader.readFrom(EnrResponsePacketDataRlpReader.java:46)
at org.hyperledger.besu.ethereum.p2p.discovery.internal.packet.enrresponse.EnrResponsePacketDataRlpReader.readFrom(EnrResponsePacketDataRlpReader.java:27)
at org.hyperledger.besu.ethereum.p2p.discovery.internal.packet.PacketDeserializer.decode(PacketDeserializer.java:92)
at org.hyperledger.besu.ethereum.p2p.discovery.VertxPeerDiscoveryAgent.lambda$handlePacket$9(VertxPeerDiscoveryAgent.java:331)
Proposed Fix
Add EndOfRLPException to the exception list on line 344 of VertxPeerDiscoveryAgent.java:
if (event.cause() instanceof PeerDiscoveryPacketDecodingException
|| event.cause() instanceof DecodeException
|| event.cause() instanceof org.apache.tuweni.rlp.EndOfRLPException) {
LOG.debug(
"Discarding invalid peer discovery packet: {}, {}",
event.cause().getMessage(),
event.cause());
}Impact
Currently, malformed packets that trigger EndOfRLPException are logged as errors, which pollutes logs and can make it harder to identify actual issues. These should be treated the same as other decoding exceptions and discarded with a debug-level log.
Location
ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/discovery/VertxPeerDiscoveryAgent.java:344
Metadata
Metadata
Assignees
Labels
No labels