Skip to content

Data race on BaseApp checkState between CreateQueryContext reader and setState writer #444

@praetoriansentry

Description

@praetoriansentry

Concurrent access to BaseApp's checkState field at 0x00c00126b7a0. Read occurs in CreateQueryContext (abci.go:1231) during gRPC query handling while write happens in setState (baseapp.go:495) during block commit. Race between query handler and consensus commit goroutines.

c1a1c57

 ESC[90m12:45AMESC[0m ESC[32mINFESC[0m ESC[1mexecuted blockESC[0m ESC[36mapp_hash=ESC[0m4E2F720CB2F29D3FC069F8AF8B2DDDA62797968521554D165E48D14A9ED539D9 ESC[36mheight=ESC[0m24 ESC[36mmodule=ESC[0mstate
 ESC[90m12:45AMESC[0m ESC[32mINFESC[0m ESC[1mcommitted stateESC[0m ESC[36mblock_app_hash=ESC[0m3052AF6B5E89AF2404A53C4470D55A631C8B134CBBF8F1FF6288DB873738C5C7 ESC[36mheight=ESC[0m24 ESC[36mmodule=ESC[0mstate
 ESC[90m12:45AMESC[0m ESC[32mINFESC[0m ESC[1mindexed block eventsESC[0m ESC[36mheight=ESC[0m24 ESC[36mmodule=ESC[0mtxindex
 ==================
 WARNING: DATA RACE
 Read at 0x00c00126b7a0 by goroutine 2716:
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).CreateQueryContext()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/baseapp/abci.go:1231 +0x2af
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).RegisterGRPCServer.func1()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/baseapp/grpcserver.go:47 +0x1a4
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).RegisterGRPCServer.func2.ChainUnaryServer.2.1()
       /go/pkg/mod/github.com/grpc-ecosystem/go-grpc-middleware@v1.4.0/chain.go:48 +0xcd
   github.com/grpc-ecosystem/go-grpc-middleware/recovery.UnaryServerInterceptor.func1()
       /go/pkg/mod/github.com/grpc-ecosystem/go-grpc-middleware@v1.4.0/recovery/interceptors.go:33 +0x174
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).RegisterGRPCServer.func2.ChainUnaryServer.2()
       /go/pkg/mod/github.com/grpc-ecosystem/go-grpc-middleware@v1.4.0/chain.go:53 +0x222
   github.com/0xPolygon/heimdall-v2/x/bor/types._Query_GetLatestSpan_Handler()
       /var/lib/heimdall/x/bor/types/query.pb.go:1039 +0x1d8
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).RegisterGRPCServer.func2()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/baseapp/grpcserver.go:79 +0x1ad
   google.golang.org/grpc.(*Server).processUnaryRPC()
       /go/pkg/mod/google.golang.org/grpc@v1.70.0/server.go:1400 +0x1bc2
   google.golang.org/grpc.(*Server).processUnaryRPC()
       /go/pkg/mod/google.golang.org/grpc@v1.70.0/server.go:1356 +0x15e7
   google.golang.org/grpc.(*Server).handleStream()
       /go/pkg/mod/google.golang.org/grpc@v1.70.0/server.go:1810 +0x1372
   google.golang.org/grpc.(*Server).serveStreams.func2.1()
       /go/pkg/mod/google.golang.org/grpc@v1.70.0/server.go:1030 +0x158
 
 Previous write at 0x00c00126b7a0 by goroutine 297:
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).setState()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/baseapp/baseapp.go:495 +0x731
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).Commit()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/baseapp/abci.go:954 +0x4e4
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.commitStores()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:1196 +0x199
   cosmossdk.io/store/rootmulti.(*Store).Commit()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk/store@v1.1.2-0.20241126102051-89dc71d02611/rootmulti/store.go:482 +0x36b
   github.com/cosmos/cosmos-sdk/baseapp.(*BaseApp).Commit()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/baseapp/abci.go:931 +0x35a
   github.com/cosmos/cosmos-sdk/server.cometABCIWrapper.Commit()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/server/cmt_abci.go:55 +0x4a
   github.com/cosmos/cosmos-sdk/server.(*cometABCIWrapper).Commit()
       <autogenerated>:1 +0x1b
   github.com/cosmos/cosmos-sdk/server.cometABCIWrapper.Commit()
       /go/pkg/mod/github.com/0x!polygon/cosmos-sdk@v0.2.5-polygon/server/cmt_abci.go:55 +0x4a
   github.com/cosmos/cosmos-sdk/server.(*cometABCIWrapper).Commit()
{
  "IPT_bytes_out": 21251248,
  "output_text": "WARNING: DATA RACE",
  "source": {
    "container": "l2-cl-1-heimdall-v2-bor-validator--2388c5a8928f43ac9c93fae2c8d51179",
    "name": "l2-cl-1-heimdall-v2-bor-validator--2388c5a8928f43ac9c93fae2c8d51179",
    "stream": "info"
  },
  "moment": {
    "input_hash": "-6832103619141409324",
    "_vtime_ticks": 744012274498,
    "session_id": "c0ceefcd588ee0d629772f6fd9eae1ec-36-12"
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions