Skip to content

Data race on ethPeer field between doWitnessRequest writer and RequestWitnesses reader #1729

@praetoriansentry

Description

@praetoriansentry

Concurrent access to ethPeer field at 0x00c000f37f68. Write occurs in doWitnessRequest (peer.go:454) while read happens in RequestWitnesses (peer.go:200). Race between goroutines spawned by witnessManager during witness fetching operations.

8509ba2

==================
WARNING: DATA RACE
Write at 0x00c000f37f68 by goroutine 268:
  github.com/ethereum/go-ethereum/eth.(*ethPeer).doWitnessRequest()
      /var/lib/bor/eth/peer.go:454 +0x884
  github.com/ethereum/go-ethereum/eth.(*ethPeer).buildWitnessRequests()
      /var/lib/bor/eth/peer.go:385 +0x649
  github.com/ethereum/go-ethereum/eth.(*ethPeer).RequestWitnesses.func1()
      /var/lib/bor/eth/peer.go:180 +0x130

Previous read at 0x00c000f37f68 by goroutine 267:
  github.com/ethereum/go-ethereum/eth.(*ethPeer).RequestWitnesses()
      /var/lib/bor/eth/peer.go:200 +0x9c4
  github.com/ethereum/go-ethereum/eth.(*ethHandler).handleBlockBroadcast.func1()
      /var/lib/bor/eth/handler_eth.go:162 +0xc9
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).fetchWitness()
      /var/lib/bor/eth/fetcher/witness_manager.go:522 +0x130
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).tick.gowrap1()
      /var/lib/bor/eth/fetcher/witness_manager.go:507 +0xaa

Goroutine 268 (running) created at:
  github.com/ethereum/go-ethereum/eth.(*ethPeer).RequestWitnesses()
      /var/lib/bor/eth/peer.go:179 +0x73c
  github.com/ethereum/go-ethereum/eth.(*ethHandler).handleBlockBroadcast.func1()
      /var/lib/bor/eth/handler_eth.go:162 +0xc9
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).fetchWitness()
      /var/lib/bor/eth/fetcher/witness_manager.go:522 +0x130
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).tick.gowrap1()
      /var/lib/bor/eth/fetcher/witness_manager.go:507 +0xaa

Goroutine 267 (running) created at:
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).tick()
      /var/lib/bor/eth/fetcher/witness_manager.go:507 +0x25a4
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).loop()
      /var/lib/bor/eth/fetcher/witness_manager.go:216 +0xc9b
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).start.gowrap2()
      /var/lib/bor/eth/fetcher/witness_manager.go:142 +0x33
==================
INFO [08-28|00:45:09.578] Whitelisting milestone deferred          err="chain out of sync"

{
  "IPT_bytes_out": 16994920,
  "output_text": "WARNING: DATA RACE",
  "source": {
    "container": "l2-el-4-bor-heimdall-v2-rpc--b97cb9deb4cc4b4fbfd625abd50535e6",
    "name": "l2-el-4-bor-heimdall-v2-rpc--b97cb9deb4cc4b4fbfd625abd50535e6",
    "stream": "error"
  },
  "moment": {
    "input_hash": "5474484343311274565",
    "_vtime_ticks": 657727462115,
    "session_id": "c0ceefcd588ee0d629772f6fd9eae1ec-36-12"
  }
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions