metropolis/clusternet: fix race condition
This gives the wireguard backend a copy of the peer data instead of a
pointer into mutable memory.
Change-Id: I47ee83f3d484cc809c35d2e1779b519ec60c7c78
Reviewed-on: https://review.monogon.dev/c/monogon/+/1825
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/clusternet/clusternet.go b/metropolis/node/core/clusternet/clusternet.go
index dc2de00..dea0f89 100644
--- a/metropolis/node/core/clusternet/clusternet.go
+++ b/metropolis/node/core/clusternet/clusternet.go
@@ -175,14 +175,14 @@
for _, n := range removed {
supervisor.Logger(ctx).Infof("Node %s removed, unconfiguring", n.id)
- if err := s.wg.unconfigurePeer(n); err != nil {
+ if err := s.wg.unconfigurePeer(n.copy()); err != nil {
// Do nothing and hope whatever caused this will go away at some point.
supervisor.Logger(ctx).Errorf("Node %s couldn't be unconfigured: %v", n.id, err)
}
}
var newNodes []*node
for _, n := range updated {
- newNodes = append(newNodes, n)
+ newNodes = append(newNodes, n.copy())
supervisor.Logger(ctx).Infof("Node %s updated: pk %s, address %s, prefixes %v", n.id, n.pubkey, n.address, n.prefixes)
}
succeeded := 0