From 8f463cf35ca0cdad6238871c3dd98ce4751a7631 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 28 Apr 2020 14:05:09 +0400 Subject: [PATCH] p2p: set RecvMessageCapacity to maxMsgSize in all reactors to prevent malicious nodes from sending us large messages (~21MB, which is the default `RecvMessageCapacity`) This allows us to remove unnecessary `maxMsgSize` check in `decodeMsg`. Since each channel has a msg capacity set to `maxMsgSize`, there's no need to check it again in `decodeMsg`. Closes #1503 --- blockchain/v0/reactor.go | 3 --- blockchain/v1/reactor.go | 3 --- blockchain/v2/reactor.go | 3 --- consensus/reactor.go | 3 --- evidence/reactor.go | 4 +--- mempool/reactor.go | 10 ++++------ p2p/pex/pex_reactor.go | 10 ++++------ 7 files changed, 9 insertions(+), 27 deletions(-) diff --git a/blockchain/v0/reactor.go b/blockchain/v0/reactor.go index 247222160..c82457bee 100644 --- a/blockchain/v0/reactor.go +++ b/blockchain/v0/reactor.go @@ -394,9 +394,6 @@ func RegisterBlockchainMessages(cdc *amino.Codec) { } func decodeMsg(bz []byte) (msg BlockchainMessage, err error) { - if len(bz) > maxMsgSize { - return msg, fmt.Errorf("msg exceeds max size (%d > %d)", len(bz), maxMsgSize) - } err = cdc.UnmarshalBinaryBare(bz, &msg) return } diff --git a/blockchain/v1/reactor.go b/blockchain/v1/reactor.go index 28a314b8a..315dbffbf 100644 --- a/blockchain/v1/reactor.go +++ b/blockchain/v1/reactor.go @@ -539,9 +539,6 @@ func RegisterBlockchainMessages(cdc *amino.Codec) { } func decodeMsg(bz []byte) (msg BlockchainMessage, err error) { - if len(bz) > maxMsgSize { - return msg, fmt.Errorf("msg exceeds max size (%d > %d)", len(bz), maxMsgSize) - } err = cdc.UnmarshalBinaryBare(bz, &msg) return } diff --git a/blockchain/v2/reactor.go b/blockchain/v2/reactor.go index ff89ee94c..d68b27a41 100644 --- a/blockchain/v2/reactor.go +++ b/blockchain/v2/reactor.go @@ -453,9 +453,6 @@ func RegisterBlockchainMessages(cdc *amino.Codec) { } func decodeMsg(bz []byte) (msg BlockchainMessage, err error) { - if len(bz) > maxMsgSize { - return msg, fmt.Errorf("msg exceeds max size (%d > %d)", len(bz), maxMsgSize) - } err = cdc.UnmarshalBinaryBare(bz, &msg) return } diff --git a/consensus/reactor.go b/consensus/reactor.go index c8c344ac8..99f40ac0b 100644 --- a/consensus/reactor.go +++ b/consensus/reactor.go @@ -1404,9 +1404,6 @@ func RegisterMessages(cdc *amino.Codec) { } func decodeMsg(bz []byte) (msg Message, err error) { - if len(bz) > maxMsgSize { - return msg, fmt.Errorf("msg exceeds max size (%d > %d)", len(bz), maxMsgSize) - } err = cdc.UnmarshalBinaryBare(bz, &msg) return } diff --git a/evidence/reactor.go b/evidence/reactor.go index 8314fa0ef..2a9554707 100644 --- a/evidence/reactor.go +++ b/evidence/reactor.go @@ -51,6 +51,7 @@ func (evR *Reactor) GetChannels() []*p2p.ChannelDescriptor { { ID: EvidenceChannel, Priority: 5, + RecvMessageCapacity: maxMsgSize, }, } } @@ -235,9 +236,6 @@ func RegisterMessages(cdc *amino.Codec) { } func decodeMsg(bz []byte) (msg Message, err error) { - if len(bz) > maxMsgSize { - return msg, fmt.Errorf("msg exceeds max size (%d > %d)", len(bz), maxMsgSize) - } err = cdc.UnmarshalBinaryBare(bz, &msg) return } diff --git a/mempool/reactor.go b/mempool/reactor.go index fda12c021..d64bb7868 100644 --- a/mempool/reactor.go +++ b/mempool/reactor.go @@ -137,10 +137,12 @@ func (memR *Reactor) OnStart() error { // GetChannels implements Reactor. // It returns the list of channels for this reactor. func (memR *Reactor) GetChannels() []*p2p.ChannelDescriptor { + maxMsgSize := calcMaxMsgSize(memR.config.MaxTxBytes) return []*p2p.ChannelDescriptor{ { - ID: MempoolChannel, - Priority: 5, + ID: MempoolChannel, + Priority: 5, + RecvMessageCapacity: maxMsgSize, }, } } @@ -271,10 +273,6 @@ func RegisterMessages(cdc *amino.Codec) { } func (memR *Reactor) decodeMsg(bz []byte) (msg Message, err error) { - maxMsgSize := calcMaxMsgSize(memR.config.MaxTxBytes) - if l := len(bz); l > maxMsgSize { - return msg, ErrTxTooLarge{maxMsgSize, l} - } err = cdc.UnmarshalBinaryBare(bz, &msg) return } diff --git a/p2p/pex/pex_reactor.go b/p2p/pex/pex_reactor.go index d06814195..8bdb0d77f 100644 --- a/p2p/pex/pex_reactor.go +++ b/p2p/pex/pex_reactor.go @@ -180,9 +180,10 @@ func (r *Reactor) OnStop() { func (r *Reactor) GetChannels() []*conn.ChannelDescriptor { return []*conn.ChannelDescriptor{ { - ID: PexChannel, - Priority: 1, - SendQueueCapacity: 10, + ID: PexChannel, + Priority: 1, + SendQueueCapacity: 10, + RecvMessageCapacity: maxMsgSize, }, } } @@ -771,9 +772,6 @@ func RegisterMessages(cdc *amino.Codec) { } func decodeMsg(bz []byte) (msg Message, err error) { - if len(bz) > maxMsgSize { - return msg, fmt.Errorf("msg exceeds max size (%d > %d)", len(bz), maxMsgSize) - } err = cdc.UnmarshalBinaryBare(bz, &msg) return }