Re: [Bitcoin-development] Newly introduced DoS

2011-09-27 Thread Luke-Jr
What about this one?

@@ -1276,13 +1278,13 @@ bool CBlock::AcceptBlock()
 // Get prev block index
 mapuint256, CBlockIndex*::iterator mi = 
mapBlockIndex.find(hashPrevBlock);
 if (mi == mapBlockIndex.end())
-return error(AcceptBlock() : prev block not found);
+return DoS(10, error(AcceptBlock() : prev block not found));


Is it certain that it cannot be triggered by a peer having some huge number 
more blocks than you?

--
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] Newly introduced DoS

2011-09-27 Thread Gavin Andresen
 @@ -1276,13 +1278,13 @@ bool CBlock::AcceptBlock()
     // Get prev block index
     mapuint256, CBlockIndex*::iterator mi =
 mapBlockIndex.find(hashPrevBlock);
     if (mi == mapBlockIndex.end())
 -        return error(AcceptBlock() : prev block not found);
 +        return DoS(10, error(AcceptBlock() : prev block not found));


 Is it certain that it cannot be triggered by a peer having some huge number
 more blocks than you?

As I said, that is a can't never happen but we'll wear a
belt-and-suspenders just in case case.

AcceptBlock() is called from two places in the code:

ProcessBlock, if the block is not an orphan:
// If don't already have its previous block, shunt it off to
holding area until we get it
if (!mapBlockIndex.count(pblock-hashPrevBlock))
{
  orphan processing stuff...
  return true;
}

// Store to disk
if (!pblock-AcceptBlock())
return error(ProcessBlock() : AcceptBlock FAILED);

The mapBlockIndex.find(hashPrevBlock) in AcceptBlock can't fail.

The second place is recursively, in AcceptBlock(), processing orphans
that link to the block being accepted, and mapBlockIndex.find() would
find the used-to-be-an-orphan-block-that-is-now-being-accepted.

So: it is a case that should be impossible to trigger. However, in
case there is some subtle bug or edge case I'm not considering it seem
to me keeping the check is appropriate, and, because it will be a
subtle bug or edge case, it seems to me keeping the DoS penalty is
also appropriate, because attackers look for subtle bugs and edge
cases that can be exploited.


-- 
--
Gavin Andresen

--
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development