Skip to content

Commit

Permalink
examplebroker: Use locked access to isAuthenticatedCalls on end session
Browse files Browse the repository at this point in the history
We had a data race, since we were accessing to the isAuthenticatedCalls
map without locking, fix this avoiding lock/unlock dance.

WARNING: DATA RACE
Read at 0x00c0001a03f0 by goroutine 311:
	runtime.mapaccess2_faststr()
		/opt/hostedtoolcache/go/1.23.0/x64/src/runtime/map_faststr.go:117 +0x0
	github.com/ubuntu/authd/examplebroker.(*Broker).EndSession()
		/home/runner/work/authd/authd/examplebroker/broker.go:733 +0xf9
	github.com/ubuntu/authd/examplebroker.(*Bus).EndSession()
		/home/runner/work/authd/authd/examplebroker/dbus.go:115 +0x5b
	runtime.call32()
		/opt/hostedtoolcache/go/1.23.0/x64/src/runtime/asm_amd64.s:776 +0x42
	reflect.Value.Call()
		/opt/hostedtoolcache/go/1.23.0/x64/src/reflect/value.go:365 +0xb5
	github.com/godbus/dbus/v5.exportedMethod.Call()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/default_handler.go:128 +0x239
	github.com/godbus/dbus/v5.(*exportedMethod).Call()
		<autogenerated>:1 +0x84
	github.com/godbus/dbus/v5.(*Conn).handleCall()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/export.go:193 +0x6f2
	github.com/godbus/dbus/v5.(*Conn).inWorker.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x44

Previous write at 0x00c0001a03f0 by goroutine 308:
	runtime.mapassign_faststr()
		/opt/hostedtoolcache/go/1.23.0/x64/src/runtime/map_faststr.go:223 +0x0
	github.com/ubuntu/authd/examplebroker.(*Broker).IsAuthenticated()
		/home/runner/work/authd/authd/examplebroker/broker.go:537 +0x276
	github.com/ubuntu/authd/examplebroker.(*Bus).IsAuthenticated()
		/home/runner/work/authd/authd/examplebroker/dbus.go:106 +0x91
	runtime.call64()
		/opt/hostedtoolcache/go/1.23.0/x64/src/runtime/asm_amd64.s:777 +0x42
	reflect.Value.Call()
		/opt/hostedtoolcache/go/1.23.0/x64/src/reflect/value.go:365 +0xb5
	github.com/godbus/dbus/v5.exportedMethod.Call()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/default_handler.go:128 +0x239
	github.com/godbus/dbus/v5.(*exportedMethod).Call()
		<autogenerated>:1 +0x84
	github.com/godbus/dbus/v5.(*Conn).handleCall()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/export.go:193 +0x6f2
	github.com/godbus/dbus/v5.(*Conn).inWorker.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x44

Goroutine 311 (running) created at:
	github.com/godbus/dbus/v5.(*Conn).inWorker()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x46a
	github.com/godbus/dbus/v5.(*Conn).Auth.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/auth.go:118 +0x33

Goroutine 308 (running) created at:
	github.com/godbus/dbus/v5.(*Conn).inWorker()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x46a
	github.com/godbus/dbus/v5.(*Conn).Auth.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/auth.go:118 +0x33
	github.com/godbus/dbus/v5.(*Conn).inWorker.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x44

Previous write at 0x00c0001a03f0 by goroutine 308:
	runtime.mapassign_faststr()
		/opt/hostedtoolcache/go/1.23.0/x64/src/runtime/map_faststr.go:223 +0x0
	github.com/ubuntu/authd/examplebroker.(*Broker).IsAuthenticated()
		/home/runner/work/authd/authd/examplebroker/broker.go:537 +0x276
	github.com/ubuntu/authd/examplebroker.(*Bus).IsAuthenticated()
		/home/runner/work/authd/authd/examplebroker/dbus.go:106 +0x91
	runtime.call64()
		/opt/hostedtoolcache/go/1.23.0/x64/src/runtime/asm_amd64.s:777 +0x42
	reflect.Value.Call()
		/opt/hostedtoolcache/go/1.23.0/x64/src/reflect/value.go:365 +0xb5
	github.com/godbus/dbus/v5.exportedMethod.Call()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/default_handler.go:128 +0x239
	github.com/godbus/dbus/v5.(*exportedMethod).Call()
		<autogenerated>:1 +0x84
	github.com/godbus/dbus/v5.(*Conn).handleCall()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/export.go:193 +0x6f2
	github.com/godbus/dbus/v5.(*Conn).inWorker.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x44

Goroutine 311 (running) created at:
	github.com/godbus/dbus/v5.(*Conn).inWorker()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x46a
	github.com/godbus/dbus/v5.(*Conn).Auth.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/auth.go:118 +0x33

Goroutine 308 (running) created at:
	github.com/godbus/dbus/v5.(*Conn).inWorker()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/conn.go:435 +0x46a
	github.com/godbus/dbus/v5.(*Conn).Auth.gowrap1()
		/home/runner/go/pkg/mod/github.com/godbus/dbus/[email protected]/auth.go:118 +0x33
  • Loading branch information
3v1n0 committed Oct 3, 2024
1 parent e304624 commit 01e2dc5
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion examplebroker/broker.go
Original file line number Diff line number Diff line change
Expand Up @@ -729,9 +729,11 @@ func (b *Broker) EndSession(ctx context.Context, sessionID string) error {
return err
}

b.isAuthenticatedCallsMu.Lock()
defer b.isAuthenticatedCallsMu.Unlock()
// Checks if there is a isAuthenticated call running for this session and cancels it before ending the session.
if _, exists := b.isAuthenticatedCalls[sessionID]; exists {
b.CancelIsAuthenticated(ctx, sessionID)
b.cancelIsAuthenticatedUnlocked(ctx, sessionID)
}

b.currentSessionsMu.Lock()
Expand All @@ -748,6 +750,10 @@ func (b *Broker) CancelIsAuthenticated(ctx context.Context, sessionID string) {
if _, exists := b.isAuthenticatedCalls[sessionID]; !exists {
return
}
b.cancelIsAuthenticatedUnlocked(ctx, sessionID)
}

func (b *Broker) cancelIsAuthenticatedUnlocked(_ context.Context, sessionID string) {
b.isAuthenticatedCalls[sessionID].cancelFunc()
delete(b.isAuthenticatedCalls, sessionID)
}
Expand Down

0 comments on commit 01e2dc5

Please sign in to comment.