Skip to content

Data race in UpdateCAs #2012

@aaronlehmann

Description

@aaronlehmann

Seen here: https://circleci.com/gh/docker/swarmkit/6414

==================
WARNING: DATA RACE
Read at 0x00c422a46d05 by goroutine 66:
  github.com/docker/swarmkit/vendor/github.com/docker/docker/pkg/tlsconfig.Clone()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/vendor/github.com/docker/docker/pkg/tlsconfig/tlsconfig_clone_go17.go:25 +0x51e
  github.com/docker/swarmkit/ca.(*MutableTLSCreds).UpdateCAs()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/ca/transport.go:143 +0x94
  github.com/docker/swarmkit/ca.(*SecurityConfig).UpdateRootCA()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/ca/config.go:146 +0x57c
  github.com/docker/swarmkit/ca.(*Server).UpdateRootCA()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/ca/server.go:551 +0x516
  github.com/docker/swarmkit/ca.(*Server).Run.func1()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/ca/server.go:395 +0x1d6
  github.com/docker/swarmkit/manager/state/store.ViewAndWatch.func1()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/state/store/memory.go:717 +0xc0
  github.com/docker/swarmkit/manager/state/store.(*MemoryStore).update()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/state/store/memory.go:235 +0x1c6
  github.com/docker/swarmkit/manager/state/store.(*MemoryStore).Update()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/state/store/memory.go:277 +0x6a
  github.com/docker/swarmkit/manager/state/store.ViewAndWatch()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/state/store/memory.go:722 +0x137
  github.com/docker/swarmkit/ca.(*Server).Run()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/ca/server.go:401 +0x40d
  github.com/docker/swarmkit/manager.(*Manager).becomeLeader.func5()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/manager.go:945 +0x61

Previous write at 0x00c422a46d05 by goroutine 42:
  runtime.slicecopy()
      /usr/local/go/src/runtime/slice.go:144 +0x0
  bufio.(*Reader).Read()
      /usr/local/go/src/bufio/bufio.go:216 +0x21a
  crypto/rand.(*devReader).Read()
      /usr/local/go/src/crypto/rand/rand_unix.go:64 +0x159
  io.ReadAtLeast()
      /usr/local/go/src/io/io.go:307 +0xb1
  io.ReadFull()
      /usr/local/go/src/io/io.go:325 +0x72
  crypto/tls.(*Config).serverInit()
      /usr/local/go/src/crypto/tls/common.go:466 +0x2c6
  crypto/tls.(*Config).(crypto/tls.serverInit)-fm()
      /usr/local/go/src/crypto/tls/handshake_server.go:44 +0x41
  sync.(*Once).Do()
      /usr/local/go/src/sync/once.go:44 +0xf2
  crypto/tls.(*Conn).serverHandshake()
      /usr/local/go/src/crypto/tls/handshake_server.go:44 +0xca
  crypto/tls.(*Conn).Handshake()
      /usr/local/go/src/crypto/tls/conn.go:1234 +0x238
  github.com/docker/swarmkit/ca.(*MutableTLSCreds).ServerHandshake()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/ca/transport.go:116 +0x172
  github.com/docker/swarmkit/vendor/google.golang.org/grpc.(*Server).useTransportAuthenticator()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/vendor/google.golang.org/grpc/server.go:324 +0x9b
  github.com/docker/swarmkit/vendor/google.golang.org/grpc.(*Server).handleRawConn()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/vendor/google.golang.org/grpc/server.go:391 +0x6a

Goroutine 66 (running) created at:
  github.com/docker/swarmkit/manager.(*Manager).becomeLeader()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/manager.go:948 +0x1b72
  github.com/docker/swarmkit/manager.(*Manager).handleLeadershipEvents()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/manager.go:821 +0x1db

Goroutine 42 (running) created at:
  github.com/docker/swarmkit/vendor/google.golang.org/grpc.(*Server).Serve()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/vendor/google.golang.org/grpc/server.go:384 +0x6b3
  github.com/docker/swarmkit/manager.(*Manager).serveListener()
      /home/ubuntu/.go_workspace/src/github.com/docker/swarmkit/manager/manager.go:850 +0x740
==================

cc @cyli

Metadata

Metadata

Assignees

No one assigned

    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