Skip to content

BR: Continues to write on closed socket after topology reload #2774

@oncilla

Description

@oncilla

In https://buildkite.com/scionproto/scionproto/builds/3124#8397b7c6-9763-447b-9b01-57413429c92e the border router continued to write to a closed socket after receiving a sighup that changes the topology.

When running the border router with race detector enabled, the following is output:

==================
WARNING: DATA RACE
Read at 0x00c0000f9798 by goroutine 89:
  runtime.convT2E()
      /usr/local/go/src/runtime/iface.go:277 +0x0
  main.(*Router).handleSock()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/router.go:99 +0xe5
  main.(*Router).handleSock-fm()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup-posix.go:97 +0x5f
  github.com/scionproto/scion/go/border/rctx.(*Sock).Start.func2()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/rctx/io.go:98 +0xbe

Previous write at 0x00c0000f9798 by main goroutine:
  github.com/scionproto/scion/go/border/rctx.(*Sock).Start()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/rctx/io.go:101 +0xad
  main.startSocks()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:337 +0x6b
  main.(*Router).setupNewContext()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:209 +0x1f8
  main.(*Router).setupCtxFromConfig()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:145 +0x2f7
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:88 +0x607
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:79 +0x307
  main.NewRouter()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/router.go:60 +0xfd
  main.realMain()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:81 +0x4b2
  main.main()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:51 +0x2f

Goroutine 89 (running) created at:
  github.com/scionproto/scion/go/border/rctx.(*Sock).Start()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/rctx/io.go:96 +0x182
  main.startSocks()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:337 +0x6b
  main.(*Router).setupNewContext()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:209 +0x1f8
  main.(*Router).setupCtxFromConfig()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:145 +0x2f7
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:88 +0x607
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:79 +0x307
  main.NewRouter()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/router.go:60 +0xfd
  main.realMain()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:81 +0x4b2
  main.main()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:51 +0x2f
==================
==================
WARNING: DATA RACE
Read at 0x00c0001b2148 by goroutine 92:
  runtime.convT2E()
      /usr/local/go/src/runtime/iface.go:277 +0x0
  main.(*Router).handleSock()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/router.go:99 +0xe5
  main.(*Router).handleSock-fm()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup-posix.go:97 +0x5f
  github.com/scionproto/scion/go/border/rctx.(*Sock).Start.func2()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/rctx/io.go:98 +0xbe

Previous write at 0x00c0001b2148 by main goroutine:
  github.com/scionproto/scion/go/border/rctx.(*Sock).Start()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/rctx/io.go:101 +0xad
  main.startSocks()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:342 +0x142
  main.(*Router).setupNewContext()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:209 +0x1f8
  main.(*Router).setupCtxFromConfig()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:145 +0x2f7
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:88 +0x607
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:79 +0x307
  main.NewRouter()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/router.go:60 +0xfd
  main.realMain()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:81 +0x4b2
  main.main()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:51 +0x2f

Goroutine 92 (running) created at:
  github.com/scionproto/scion/go/border/rctx.(*Sock).Start()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/rctx/io.go:96 +0x182
  main.startSocks()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:342 +0x142
  main.(*Router).setupNewContext()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:209 +0x1f8
  main.(*Router).setupCtxFromConfig()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:145 +0x2f7
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:88 +0x607
  main.(*Router).setup()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/setup.go:79 +0x307
  main.NewRouter()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/router.go:60 +0xfd
  main.realMain()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:81 +0x4b2
  main.main()
      /home/roosd/go/src/github.com/scionproto/scion/go/border/main.go:51 +0x2f
==================

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions