Skip to content

Data race on witnessManager field between fetchWitness reader and handleWitnessFetchFailureExt writer #1736

@praetoriansentry

Description

@praetoriansentry

Concurrent access to witnessManager field at 0x00c0008fdf40. Read occurs in fetchWitness (witness_manager.go:519) while write happens in handleWitnessFetchFailureExt (witness_manager.go:686) during witness fetch failure handling. Race between concurrent witness fetching goroutines spawned by tick function.

8509ba2

INFO [08-28|00:51:56.134] Block building interrupted due to timeout block=287
INFO [08-28|00:51:56.262] [wm] Witness fetch timed out for peer    peer=200888157a5302c384651a4fa831f4e702f374abf14d8005e21dc6d17d84dfcc hash=11f607..f4453e
INFO [08-28|00:51:56.262] [wm] Witness fetch timed out for peer    peer=200888157a5302c384651a4fa831f4e702f374abf14d8005e21dc6d17d84dfcc hash=1e508e..97063f
==================
WARNING: DATA RACE
Read at 0x00c0008fdf40 by goroutine 6647:
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).fetchWitness()
      /var/lib/bor/eth/fetcher/witness_manager.go:519 +0x77
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).tick.gowrap1()
      /var/lib/bor/eth/fetcher/witness_manager.go:507 +0xaa

Previous write at 0x00c0008fdf40 by goroutine 6535:
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).handleWitnessFetchFailureExt()
      /var/lib/bor/eth/fetcher/witness_manager.go:686 +0x445
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).fetchWitness()
      /var/lib/bor/eth/fetcher/witness_manager.go:589 +0x1596
  github.com/ethereum/go-ethereum/eth/fetcher.(*witnessManager).tick.gowrap1()
      /var/lib/bor/eth/fetcher/witness_manager.go:507 +0xaa

Goroutine 6647 (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

Goroutine 6535 (finished) 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:51:56.268] Block building interrupted due to timeout block=280

{
  "IPT_bytes_out": 42077696,
  "output_text": "WARNING: DATA RACE",
  "source": {
    "container": "l2-el-4-bor-heimdall-v2-rpc--f059a1d731684b068b81d6afaf29880b",
    "name": "l2-el-4-bor-heimdall-v2-rpc--f059a1d731684b068b81d6afaf29880b",
    "stream": "error"
  },
  "moment": {
    "input_hash": "-2012047140897733835",
    "_vtime_ticks": 2406464272233,
    "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