diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 9cfd345f5..550c26a36 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -1120,15 +1120,19 @@ func (b *LocalBackend) SetControlClientStatus(c controlclient.Client, st control b.logf("[v1] TKA sync error: %v", err) } b.mu.Lock() - if b.tka != nil { - head, err := b.tka.authority.Head().MarshalText() - if err != nil { - b.logf("[v1] error marshalling tka head: %v", err) + // As we stepped outside of the lock, it's possible for b.cc + // to now be nil. + if b.cc != nil { + if b.tka != nil { + head, err := b.tka.authority.Head().MarshalText() + if err != nil { + b.logf("[v1] error marshalling tka head: %v", err) + } else { + b.cc.SetTKAHead(string(head)) + } } else { - b.cc.SetTKAHead(string(head)) + b.cc.SetTKAHead("") } - } else { - b.cc.SetTKAHead("") } if !envknob.TKASkipSignatureCheck() {