prevent peer flooding request queue for an inv
mapAlreadyAskedFor does not keep track of which peer has a request queued for a particular tx. As a result, a peer can blind a node to a tx indefinitely by sending many invs for the same tx, and then never replying to getdatas for it. Each inv received will be placed 2 minutes farther back in mapAlreadyAskedFor, so a short message containing 10 invs would render that tx unavailable for 20 minutes. This is fixed by disallowing a peer from having more than one entry for a particular inv in mapAlreadyAskedFor at a time.
This commit is contained in:
@@ -5226,6 +5226,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
|
||||
vGetData.clear();
|
||||
}
|
||||
}
|
||||
pto->setAskFor.erase(inv.hash);
|
||||
pto->mapAskFor.erase(pto->mapAskFor.begin());
|
||||
}
|
||||
if (!vGetData.empty())
|
||||
|
||||
Reference in New Issue
Block a user