Permalink
Browse files

Prevent fingerprinting, disk-DoS with compact blocks

- Ignore GETBLOCKTXN requests for unknown blocks

Don't disconnect peers, or else we leak information that could be
used for fingerprinting.

- Ignore CMPCTBLOCK messages for pruned blocks

Also ignores CMPCTBLOCK announcements that have too little work.  This is to
prevent disk-exhaustion DoS.

Github-Pull: #8408
Rebased-From: 1de2a46 1d06e49
  • Loading branch information...
sdaftuar authored and laanwj committed Jul 26, 2016
1 parent 8360d5b commit b7e201181bcc0f6328e0a499803f1dbb2c2dbd28
Showing with 1 addition and 2 deletions.
  1. +1 −2 src/main.cpp
View
@@ -5344,7 +5344,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
BlockMap::iterator it = mapBlockIndex.find(req.blockhash);
if (it == mapBlockIndex.end() || !(it->second->nStatus & BLOCK_HAVE_DATA)) {
Misbehaving(pfrom->GetId(), 100);
LogPrintf("Peer %d sent us a getblocktxn for a block we don't have", pfrom->id);
return true;
}
@@ -5628,8 +5627,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
std::vector<CInv> vInv(1);
vInv[0] = CInv(MSG_BLOCK, cmpctblock.header.GetHash());
pfrom->PushMessage(NetMsgType::GETDATA, vInv);
return true;
}
return true;
}
// If we're not close to tip yet, give up and let parallel block fetch work its magic

0 comments on commit b7e2011

Please sign in to comment.