summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdrian Dewhurst <adrian@tailscale.com>2024-03-20 11:31:31 -0400
committerAdrian Dewhurst <sailor@sailorfrag.net>2024-03-20 15:42:44 -0400
commit2f7e7be2ea98c249dcdecf761ec85359a2d2751f (patch)
tree78516c5ad40c6092124a8ed79019ce6baf4b8fc7
parent067ed0bf6fa8f725ab7f3b645d7f3bf1ebb1c533 (diff)
downloadtailscale-2f7e7be2ea98c249dcdecf761ec85359a2d2751f.tar.xz
tailscale-2f7e7be2ea98c249dcdecf761ec85359a2d2751f.zip
control/controlclient: do not alias peer CapMap
Updates #cleanup Change-Id: I10fd5e04310cdd7894a3caa3045b86eb0a06b6a0 Signed-off-by: Adrian Dewhurst <adrian@tailscale.com>
-rw-r--r--control/controlclient/map.go5
-rw-r--r--control/controlclient/map_test.go5
2 files changed, 8 insertions, 2 deletions
diff --git a/control/controlclient/map.go b/control/controlclient/map.go
index e03e57d7a..31854515f 100644
--- a/control/controlclient/map.go
+++ b/control/controlclient/map.go
@@ -8,6 +8,7 @@ import (
"context"
"encoding/json"
"fmt"
+ "maps"
"net"
"reflect"
"slices"
@@ -668,14 +669,14 @@ func peerChangeDiff(was tailcfg.NodeView, n *tailcfg.Node) (_ *tailcfg.PeerChang
if n.CapMap == nil {
pc().CapMap = make(tailcfg.NodeCapMap)
} else {
- pc().CapMap = n.CapMap
+ pc().CapMap = maps.Clone(n.CapMap)
}
break
}
was.CapMap().Range(func(k tailcfg.NodeCapability, v views.Slice[tailcfg.RawMessage]) bool {
nv, ok := n.CapMap[k]
if !ok || !views.SliceEqual(v, views.SliceOf(nv)) {
- pc().CapMap = n.CapMap
+ pc().CapMap = maps.Clone(n.CapMap)
return false
}
return true
diff --git a/control/controlclient/map_test.go b/control/controlclient/map_test.go
index 817e730ca..c3d05b44a 100644
--- a/control/controlclient/map_test.go
+++ b/control/controlclient/map_test.go
@@ -866,6 +866,11 @@ func TestPeerChangeDiff(t *testing.T) {
b: &tailcfg.Node{ID: 1, CapMap: tailcfg.NodeCapMap{}},
want: &tailcfg.PeerChange{NodeID: 1, CapMap: tailcfg.NodeCapMap{}},
}, {
+ name: "patch-capmap-remove-as-nil",
+ a: &tailcfg.Node{ID: 1, CapMap: tailcfg.NodeCapMap{tailcfg.CapabilityAdmin: nil}},
+ b: &tailcfg.Node{ID: 1},
+ want: &tailcfg.PeerChange{NodeID: 1, CapMap: tailcfg.NodeCapMap{}},
+ }, {
name: "patch-capmap-add-key-to-empty-map",
a: &tailcfg.Node{ID: 1},
b: &tailcfg.Node{ID: 1, CapMap: tailcfg.NodeCapMap{tailcfg.CapabilityAdmin: nil}},