Skip to content

Concurrent map iteration and modification in getEdgeRouterConn causes panic #689

@shekahamed

Description

@shekahamed

A panic occurs in the Ziti Go SDK when multiple goroutines access getEdgeRouterConn(). The issue arises due to concurrent iteration and modification of the SupportedProtocols map inside session.EdgeRouters. This results in a fatal runtime error:

Logs/Stack Trace:

fatal error: concurrent map iteration and map write

goroutine 77040781 [running]:
github.com/openziti/sdk-golang/ziti.(*ContextImpl).getEdgeRouterConn(0xc00015d900, 0xc021dbcb00, {0x2598140, 0xc0203d48a0})
	/go/pkg/mod/github.com/openziti/[email protected]/ziti/ziti.go:1286 +0x4c7
github.com/openziti/sdk-golang/ziti.(*ContextImpl).dialSession(0xc01a84ed90?, 0xc012cc9d60, 0xc021dbcb00, 0xc0203d48a0)
	/go/pkg/mod/github.com/openziti/[email protected]/ziti/ziti.go:1200 +0x2c
github.com/openziti/sdk-golang/ziti.(*ContextImpl).DialWithOptions(0xc00015d900, {0xc0165b91a0, 0x30}, 0xc0057439a0)
	/go/pkg/mod/github.com/openziti/[email protected]/ziti/ziti.go:1098 +0x52e

The issue occurs in getEdgeRouterConn(), specifically in this code:

for _, edgeRouter := range session.EdgeRouters {
    for proto, addr := range edgeRouter.SupportedProtocols {
        addr = strings.Replace(addr, "://", ":", 1)
        edgeRouter.SupportedProtocols[proto] = addr  // <--- Modifies map while iterating
    }
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions