mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-08 01:05:35 +00:00
ipn/ipnlocal: fix null dereference for early suggested exit node queries (#11885)
Fixes tailscale/corp#19558 A request for the suggested exit nodes that occurs too early in the VPN lifecycle would result in a null deref of the netmap and/or the netcheck report. This checks both and errors out. Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
This commit is contained in:
parent
745931415c
commit
71e9258ad9
@ -6253,6 +6253,7 @@ func mayDeref[T any](p *T) (v T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ErrNoPreferredDERP = errors.New("no preferred DERP, try again later")
|
var ErrNoPreferredDERP = errors.New("no preferred DERP, try again later")
|
||||||
|
var ErrCannotSuggestExitNode = errors.New("unable to suggest an exit node, try again later")
|
||||||
|
|
||||||
// SuggestExitNode computes a suggestion based on the current netmap and last netcheck report. If
|
// SuggestExitNode computes a suggestion based on the current netmap and last netcheck report. If
|
||||||
// there are multiple equally good options, one is selected at random, so the result is not stable. To be
|
// there are multiple equally good options, one is selected at random, so the result is not stable. To be
|
||||||
@ -6266,6 +6267,9 @@ func (b *LocalBackend) SuggestExitNode() (response apitype.ExitNodeSuggestionRes
|
|||||||
lastReport := b.MagicConn().GetLastNetcheckReport(b.ctx)
|
lastReport := b.MagicConn().GetLastNetcheckReport(b.ctx)
|
||||||
netMap := b.netMap
|
netMap := b.netMap
|
||||||
b.mu.Unlock()
|
b.mu.Unlock()
|
||||||
|
if lastReport == nil || netMap == nil {
|
||||||
|
return response, ErrCannotSuggestExitNode
|
||||||
|
}
|
||||||
seed := time.Now().UnixNano()
|
seed := time.Now().UnixNano()
|
||||||
r := rand.New(rand.NewSource(seed))
|
r := rand.New(rand.NewSource(seed))
|
||||||
return suggestExitNode(lastReport, netMap, r)
|
return suggestExitNode(lastReport, netMap, r)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user