Skip to content
This repository has been archived by the owner on May 11, 2022. It is now read-only.

Data races in AutoNAT #16

Closed
raulk opened this issue Mar 2, 2019 · 1 comment
Closed

Data races in AutoNAT #16

raulk opened this issue Mar 2, 2019 · 1 comment
Assignees
Labels
kind/bug A bug in existing code (including security flaws)

Comments

@raulk
Copy link
Member

raulk commented Mar 2, 2019

Enabling -race on CI (#15) uncovered a number of data races:

=== RUN   TestAutoNATPrivate
==================
WARNING: DATA RACE
Read at 0x00c0001671d0 by goroutine 17:
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).getPeers()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:188 +0x100
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).autodetect()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:128 +0x6b
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).background()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:112 +0x1c2
Previous write at 0x00c0001671d0 by goroutine 8:
  runtime.mapassign_faststr()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/runtime/map_faststr.go:190 +0x0
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:76 +0x1a7
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPrivate()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:95 +0xfb
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Goroutine 17 (running) created at:
  github.com/libp2p/go-libp2p-autonat.NewAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:82 +0x213
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:75 +0xd7
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPrivate()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:95 +0xfb
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Goroutine 8 (running) created at:
  testing.(*T).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:878 +0x659
  testing.runTests.func1()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1119 +0xa8
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
  testing.runTests()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1117 +0x4ee
  testing.(*M).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1034 +0x2ee
  main.main()
      _testmain.go:98 +0x332
==================
==================
WARNING: DATA RACE
Read at 0x00c0000f41e8 by goroutine 17:
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).getPeers()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:194 +0x242
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).autodetect()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:128 +0x6b
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).background()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:112 +0x1c2
Previous write at 0x00c0000f41e8 by goroutine 8:
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:76 +0x1bc
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPrivate()
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Goroutine 17 (running) created at:
  github.com/libp2p/go-libp2p-autonat.NewAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:82 +0x213
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:75 +0xd7
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPrivate()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:95 +0xfb
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Goroutine 8 (running) created at:
  testing.(*T).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:878 +0x659
  testing.runTests.func1()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1119 +0xa8
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
  testing.runTests()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1117 +0x4ee
  testing.(*M).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1034 +0x2ee
  main.main()
      _testmain.go:98 +0x332
==================
==================
WARNING: DATA RACE
Read at 0x00c0000a6338 by goroutine 8:
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).Status()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:88 +0x56
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPrivate()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:105 +0x19b
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Previous write at 0x00c0000a6338 by goroutine 17:
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).autodetect()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:173 +0x6c0
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).background()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:112 +0x1c2
Goroutine 8 (running) created at:
  testing.(*T).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:878 +0x659
  testing.runTests.func1()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1119 +0xa8
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
  testing.runTests()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1117 +0x4ee
  testing.(*M).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1034 +0x2ee
  main.main()
      _testmain.go:98 +0x332
Goroutine 17 (running) created at:
  github.com/libp2p/go-libp2p-autonat.NewAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:82 +0x213
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:75 +0xd7
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPrivate()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:95 +0xfb
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
==================
--- FAIL: TestAutoNATPrivate (2.32s)
    testing.go:771: race detected during execution of test
=== RUN   TestAutoNATPublic
==================
WARNING: DATA RACE
Read at 0x00c000166ea0 by goroutine 80:
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).getPeers()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:188 +0x100
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).autodetect()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:128 +0x6b
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).background()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:112 +0x1c2
Previous write at 0x00c000166ea0 by goroutine 62:
  runtime.mapassign_faststr()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/runtime/map_faststr.go:190 +0x0
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:76 +0x1a7
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPublic()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:116 +0xfb
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Goroutine 80 (running) created at:
  github.com/libp2p/go-libp2p-autonat.NewAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:82 +0x213
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:75 +0xd7
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPublic()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:116 +0xfb
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Goroutine 62 (running) created at:
  testing.(*T).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:878 +0x659
  testing.runTests.func1()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1119 +0xa8
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
  testing.runTests()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1117 +0x4ee
  testing.(*M).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1034 +0x2ee
  main.main()
      _testmain.go:98 +0x332
==================
==================
WARNING: DATA RACE
Read at 0x00c000078518 by goroutine 62:
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).Status()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:88 +0x56
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPublic()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:126 +0x19b
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
Previous write at 0x00c000078518 by goroutine 80:
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).autodetect()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:149 +0xe11
  github.com/libp2p/go-libp2p-autonat.(*AmbientAutoNAT).background()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:112 +0x1c2
Goroutine 62 (running) created at:
  testing.(*T).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:878 +0x659
  testing.runTests.func1()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1119 +0xa8
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
  testing.runTests()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1117 +0x4ee
  testing.(*M).Run()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:1034 +0x2ee
  main.main()
      _testmain.go:98 +0x332
Goroutine 80 (running) created at:
  github.com/libp2p/go-libp2p-autonat.NewAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat.go:82 +0x213
  github.com/libp2p/go-libp2p-autonat.makeAutoNAT()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:75 +0xd7
  github.com/libp2p/go-libp2p-autonat.TestAutoNATPublic()
      /home/travis/gopath/src/github.com/libp2p/go-libp2p-autonat/autonat_test.go:116 +0xfb
  testing.tRunner()
      /home/travis/.gimme/versions/go1.11.5.linux.amd64/src/testing/testing.go:827 +0x162
==================
--- FAIL: TestAutoNATPublic (2.25s)
    testing.go:771: race detected during execution of test
FAIL
@raulk raulk added kind/bug A bug in existing code (including security flaws) P0 Critical: Tackled by core team ASAP labels Mar 2, 2019
@raulk raulk changed the title data races in autonat Data races in AutoNAt Mar 2, 2019
@raulk raulk changed the title Data races in AutoNAt Data races in AutoNAT Mar 2, 2019
@vyzo vyzo removed the P0 Critical: Tackled by core team ASAP label Mar 2, 2019
@vyzo
Copy link
Contributor

vyzo commented Mar 2, 2019

The getPeers data race is a fluke of the test, the test directly access the peer table.
The Status data race is benign, but ok, I'll add a mutex around the variable access to pacify the thing.

@ghost ghost added the status/in-progress In progress label Mar 2, 2019
@vyzo vyzo closed this as completed in #17 Mar 5, 2019
@ghost ghost removed the status/in-progress In progress label Mar 5, 2019
willscott pushed a commit that referenced this issue Mar 13, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
kind/bug A bug in existing code (including security flaws)
Projects
None yet
Development

No branches or pull requests

2 participants