1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
Received: from sog-mx-1.v43.ch3.sourceforge.com ([172.29.43.191]
helo=mx.sourceforge.net)
by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76)
(envelope-from <gavinandresen@gmail.com>) id 1R8eRH-00031L-6S
for bitcoin-development@lists.sourceforge.net;
Tue, 27 Sep 2011 20:39:39 +0000
Received-SPF: pass (sog-mx-1.v43.ch3.sourceforge.com: domain of gmail.com
designates 209.85.161.47 as permitted sender)
client-ip=209.85.161.47; envelope-from=gavinandresen@gmail.com;
helo=mail-fx0-f47.google.com;
Received: from mail-fx0-f47.google.com ([209.85.161.47])
by sog-mx-1.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-MD5:128)
(Exim 4.76) id 1R8eRG-00034c-Gv
for bitcoin-development@lists.sourceforge.net;
Tue, 27 Sep 2011 20:39:39 +0000
Received: by fxi1 with SMTP id 1so10719437fxi.34
for <bitcoin-development@lists.sourceforge.net>;
Tue, 27 Sep 2011 13:39:32 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.223.94.134 with SMTP id z6mr13026160fam.8.1317155972253; Tue,
27 Sep 2011 13:39:32 -0700 (PDT)
Received: by 10.152.25.105 with HTTP; Tue, 27 Sep 2011 13:39:32 -0700 (PDT)
In-Reply-To: <201109271608.07053.luke@dashjr.org>
References: <201109261517.11245.luke@dashjr.org>
<CABsx9T1gfuiHj9aR=1gDxtEqJzov5iXRqVEiEBUx-VBcearAZQ@mail.gmail.com>
<201109271608.07053.luke@dashjr.org>
Date: Tue, 27 Sep 2011 16:39:32 -0400
Message-ID: <CABsx9T3Znz83XpCBZO_J8jNecKkmUseVsBgHDDmbiVuZ1HFaoQ@mail.gmail.com>
From: Gavin Andresen <gavinandresen@gmail.com>
To: Luke-Jr <luke@dashjr.org>
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -1.6 (-)
X-Spam-Report: Spam Filtering performed by mx.sourceforge.net.
See http://spamassassin.org/tag/ for more details.
-1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for
sender-domain
0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider
(gavinandresen[at]gmail.com)
-0.0 SPF_PASS SPF: sender matches SPF record
-0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from
author's domain
0.1 DKIM_SIGNED Message has a DKIM or DK signature,
not necessarily valid
-0.1 DKIM_VALID Message has at least one valid DKIM or DK signature
0.0 AWL AWL: From: address is in the auto white-list
X-Headers-End: 1R8eRG-00034c-Gv
Cc: bitcoin-development@lists.sourceforge.net
Subject: Re: [Bitcoin-development] Newly introduced DoS
X-BeenThere: bitcoin-development@lists.sourceforge.net
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: <bitcoin-development.lists.sourceforge.net>
List-Unsubscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
<mailto:bitcoin-development-request@lists.sourceforge.net?subject=unsubscribe>
List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development>
List-Post: <mailto:bitcoin-development@lists.sourceforge.net>
List-Help: <mailto:bitcoin-development-request@lists.sourceforge.net?subject=help>
List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/bitcoin-development>,
<mailto:bitcoin-development-request@lists.sourceforge.net?subject=subscribe>
X-List-Received-Date: Tue, 27 Sep 2011 20:39:39 -0000
> @@ -1276,13 +1278,13 @@ bool CBlock::AcceptBlock()
> =A0 =A0 // Get prev block index
> =A0 =A0 map<uint256, CBlockIndex*>::iterator mi =3D
> mapBlockIndex.find(hashPrevBlock);
> =A0 =A0 if (mi =3D=3D mapBlockIndex.end())
> - =A0 =A0 =A0 =A0return error("AcceptBlock() : prev block not found");
> + =A0 =A0 =A0 =A0return DoS(10, error("AcceptBlock() : prev block not fou=
nd"));
>
>
> Is it certain that it cannot be triggered by a peer having some huge numb=
er
> 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.
--=20
--
Gavin Andresen
|