Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
a5237a27
Commit
a5237a27
authored
Jun 05, 2018
by
Felföldi Zsolt
Committed by
Péter Szilágyi
Jun 05, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
les: add Skip overflow check to GetBlockHeadersMsg handler (#16891)
parent
7a22e890
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
18 additions
and
7 deletions
+18
-7
handler.go
les/handler.go
+18
-7
No files found.
les/handler.go
View file @
a5237a27
...
...
@@ -19,6 +19,7 @@ package les
import
(
"encoding/binary"
"encoding/json"
"errors"
"fmt"
"math/big"
...
...
@@ -441,7 +442,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
// Advance to the next header of the query
switch
{
case
query
.
Origin
.
Hash
!=
(
common
.
Hash
{})
&&
query
.
Reverse
:
case
hashMode
&&
query
.
Reverse
:
// Hash based traversal towards the genesis block
for
i
:=
0
;
i
<
int
(
query
.
Skip
)
+
1
;
i
++
{
if
header
:=
pm
.
blockchain
.
GetHeader
(
query
.
Origin
.
Hash
,
number
);
header
!=
nil
{
...
...
@@ -452,16 +453,26 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
break
}
}
case
query
.
Origin
.
Hash
!=
(
common
.
Hash
{})
&&
!
query
.
Reverse
:
case
hashMode
&&
!
query
.
Reverse
:
// Hash based traversal towards the leaf block
if
header
:=
pm
.
blockchain
.
GetHeaderByNumber
(
origin
.
Number
.
Uint64
()
+
query
.
Skip
+
1
);
header
!=
nil
{
if
pm
.
blockchain
.
GetBlockHashesFromHash
(
header
.
Hash
(),
query
.
Skip
+
1
)[
query
.
Skip
]
==
query
.
Origin
.
Hash
{
query
.
Origin
.
Hash
=
header
.
Hash
()
var
(
current
=
origin
.
Number
.
Uint64
()
next
=
current
+
query
.
Skip
+
1
)
if
next
<=
current
{
infos
,
_
:=
json
.
MarshalIndent
(
p
.
Peer
.
Info
(),
""
,
" "
)
p
.
Log
()
.
Warn
(
"GetBlockHeaders skip overflow attack"
,
"current"
,
current
,
"skip"
,
query
.
Skip
,
"next"
,
next
,
"attacker"
,
infos
)
unknown
=
true
}
else
{
if
header
:=
pm
.
blockchain
.
GetHeaderByNumber
(
next
);
header
!=
nil
{
if
pm
.
blockchain
.
GetBlockHashesFromHash
(
header
.
Hash
(),
query
.
Skip
+
1
)[
query
.
Skip
]
==
query
.
Origin
.
Hash
{
query
.
Origin
.
Hash
=
header
.
Hash
()
}
else
{
unknown
=
true
}
}
else
{
unknown
=
true
}
}
else
{
unknown
=
true
}
case
query
.
Reverse
:
// Number based traversal towards the genesis block
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment