Default block announce validation should reject additional data (#7726)

If we are using the default block announce validator and receive
additional data alongside the block announcement, we should disconnect
this peer.
This commit is contained in:
Bastian Köcher
2020-12-14 18:47:08 +01:00
committed by GitHub
parent 6b08b37bc9
commit 059746183d
3 changed files with 33 additions and 8 deletions
@@ -324,6 +324,8 @@ pub enum PollBlockAnnounceValidation<H> {
Failure {
/// Who sent the processed block announcement?
who: PeerId,
/// Should the peer be disconnected?
disconnect: bool,
},
/// The announcement does not require further handling.
Nothing {
@@ -354,6 +356,8 @@ enum PreValidateBlockAnnounce<H> {
Failure {
/// Who sent the processed block announcement?
who: PeerId,
/// Should the peer be disconnected?
disconnect: bool,
},
/// The announcement does not require further handling.
Nothing {
@@ -1215,14 +1219,14 @@ impl<B: BlockT> ChainSync<B> {
announce,
who,
},
Ok(Validation::Failure) => {
Ok(Validation::Failure { disconnect }) => {
debug!(
target: "sync",
"Block announcement validation of block {} from {} failed",
hash,
who,
);
PreValidateBlockAnnounce::Failure { who }
PreValidateBlockAnnounce::Failure { who, disconnect }
}
Err(e) => {
error!(target: "sync", "💔 Block announcement validation errored: {}", e);
@@ -1280,9 +1284,9 @@ impl<B: BlockT> ChainSync<B> {
self.peer_block_announce_validation_finished(&who);
return PollBlockAnnounceValidation::Nothing { is_best, who, header: announce.header }
},
PreValidateBlockAnnounce::Failure { who } => {
PreValidateBlockAnnounce::Failure { who, disconnect } => {
self.peer_block_announce_validation_finished(&who);
return PollBlockAnnounceValidation::Failure { who }
return PollBlockAnnounceValidation::Failure { who, disconnect }
},
PreValidateBlockAnnounce::Process { announce, is_new_best, who } => {
self.peer_block_announce_validation_finished(&who);