aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuhas Daftuar <sdaftuar@chaincode.com>2017-10-06 14:11:43 -0400
committerMarcoFalke <falke.marco@gmail.com>2017-11-02 13:09:00 -0400
commit3acec3878133c52f4f3a594baf1dcbd6575244bb (patch)
tree701f01e965031ed46f2735b447d46ce91c29b6bf
parent0e9d04bf0a9465d085df1f8c8858cf427c6c97ba (diff)
downloadbitcoin-3acec3878133c52f4f3a594baf1dcbd6575244bb.tar.xz
Don't process unrequested, low-work blocks
A peer could try to waste our resources by sending us unrequested blocks with low work, eg to fill up our disk. Since e2652002b6011f793185d473f87f1730c625593b we no longer request blocks until we know we're on a chain with more than nMinimumChainWork (our anti-DoS threshold), but we would still process unrequested blocks that had more work than our tip. This commit fixes that behavior. Github-Pull: #11458 Rebased-From: ce8cd7a7da9174ab151172fc0ce97b5164637cf3
-rw-r--r--src/validation.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/validation.cpp b/src/validation.cpp
index 76b8401f1b..3bff2d8228 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -3120,6 +3120,12 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation
if (pindex->nTx != 0) return true; // This is a previously-processed block that was pruned
if (!fHasMoreWork) return true; // Don't process less-work chains
if (fTooFarAhead) return true; // Block height is too high
+
+ // Protect against DoS attacks from low-work chains.
+ // If our tip is behind, a peer could try to send us
+ // low-work blocks on a fake chain that we would never
+ // request; don't process these.
+ if (pindex->nChainWork < nMinimumChainWork) return true;
}
if (fNewBlock) *fNewBlock = true;