Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add locks around session store map #44

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

brad-defined
Copy link

I encountered a data race when running parallelized tests with this library. The stack demonstrated a race between NewSession() performing a write operation on a map and GetSessionByID() performing a racing read operation on the same map.

This PR inserts a mutex around map access to solve this data race.

==================
WARNING: DATA RACE
Write at 0x00c00032aea0 by goroutine 22758:
  runtime.mapassign_faststr()
      /opt/hostedtoolcache/go/1.20.3/x64/src/runtime/map_faststr.go:203 +0x0
  github.com/oauth2-proxy/mockoidc.(*SessionStore).NewSession()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/session.go:58 +0x332
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).Authorize()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/handlers.go:105 +0x63a
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).Authorize-fm()
      <autogenerated>:1 +0x57
  net/http.HandlerFunc.ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).forceError.func1()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/mockoidc.go:285 +0x13c
  net/http.HandlerFunc.ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
  net/http.(*ServeMux).ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2500 +0xc5
  net/http.serverHandler.ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2936 +0x682
  net/http.(*conn).serve()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:1995 +0xbd4
  net/http.(*Server).Serve.func3()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x58

Previous read at 0x00c00032aea0 by goroutine 22762:
  runtime.mapaccess2_faststr()
      /opt/hostedtoolcache/go/1.20.3/x64/src/runtime/map_faststr.go:108 +0x0
  github.com/oauth2-proxy/mockoidc.(*SessionStore).GetSessionByID()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/session.go:65 +0x1f0
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).validateCodeGrant()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/handlers.go:230 +0x19f
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).Token()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/handlers.go:163 +0x285
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).Token-fm()
      <autogenerated>:1 +0x57
  net/http.HandlerFunc.ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).forceError.func1()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/mockoidc.go:285 +0x13c
  net/http.HandlerFunc.ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2122 +0x4d
  net/http.(*ServeMux).ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2500 +0xc5
  net/http.serverHandler.ServeHTTP()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:2936 +0x682
  net/http.(*conn).serve()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:1995 +0xbd4
  net/http.(*Server).Serve.func3()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x58

Goroutine 22758 (running) created at:
  net/http.(*Server).Serve()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x817
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).Start.func1()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/mockoidc.go:129 +0x67

Goroutine 22762 (running) created at:
  net/http.(*Server).Serve()
      /opt/hostedtoolcache/go/1.20.3/x64/src/net/http/server.go:3089 +0x817
  github.com/oauth2-proxy/mockoidc.(*MockOIDC).Start.func1()
      /home/runner/go/pkg/mod/github.com/oauth2-proxy/mockoidc@v0.0.0-20220308204021-b9169deeb282/mockoidc.go:129 +0x67
==================

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant