m/n/core/network/hostsfile: fix nodeMap data race

Change-Id: I7c052691712ebd39e2a23a9497d4d6d0c0ab1e0c
Reviewed-on: https://review.monogon.dev/c/monogon/+/1817
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/node/core/network/hostsfile/hostsfile.go b/metropolis/node/core/network/hostsfile/hostsfile.go
index ea0a357..5198f9a 100644
--- a/metropolis/node/core/network/hostsfile/hostsfile.go
+++ b/metropolis/node/core/network/hostsfile/hostsfile.go
@@ -264,6 +264,13 @@
 		for _, t := range ev.NodeTombstones {
 			delete(nodes, t.NodeId)
 		}
-		s.clusterC <- nodes
+
+		// Copy nodemap before passing it over to the main goroutine. The values don't
+		// need to be deep copied as they're not ever changed (only inserted).
+		nodesCopy := make(nodeMap)
+		for k, v := range nodes {
+			nodesCopy[k] = v
+		}
+		s.clusterC <- nodesCopy
 	}
 }