p2p: session should terminate on nonce wrapping (#3531) (#3609)

Refs #3531
This commit is contained in:
Ivan Kushmantsev
2019-05-02 10:09:56 +04:00
committed by Anton Kaliaev
parent 2c26d95ab9
commit 5df6cf563a
2 changed files with 9 additions and 2 deletions

View File

@@ -8,6 +8,7 @@ import (
"encoding/binary"
"errors"
"io"
"math"
"net"
"sync"
"time"
@@ -439,6 +440,11 @@ func shareAuthSignature(sc *SecretConnection, pubKey crypto.PubKey, signature []
// (little-endian in nonce[4:]).
func incrNonce(nonce *[aeadNonceSize]byte) {
counter := binary.LittleEndian.Uint64(nonce[4:])
if counter == math.MaxUint64 {
// Terminates the session and makes sure the nonce would not re-used.
// See https://github.com/tendermint/tendermint/issues/3531
panic("can't increase nonce without overflow")
}
counter++
binary.LittleEndian.PutUint64(nonce[4:], counter)
}