mirror of
https://github.com/juanfont/headscale.git
synced 2026-10-24 23:36:49 +09:00
noise: drop write-only nodeKey field to fix data race
noiseServer.nodeKey was assigned on every PollNetMap and Register request but never read anywhere. The inner HTTP/2 mux multiplexes concurrent requests over one Noise session, so those per-request writes to the shared field raced (caught by -race in servertest TestConnectDisconnectRace, reachable by a client issuing concurrent map requests). Remove the dead field and its two writes.
This commit is contained in:
1 parent
c483bebba8
commit
9fc88e308f
1 file changed
-5
@@ -84,7 +84,6 @@ type noiseServer struct {
|
|||||||
http2Server *http2.Server
|
http2Server *http2.Server
|
||||||
conn *controlbase.Conn
|
conn *controlbase.Conn
|
||||||
machineKey key.MachinePublic
|
machineKey key.MachinePublic
|
||||||
nodeKey key.NodePublic
|
|
||||||
|
|
||||||
// [tailcfg.EarlyNoise]-related stuff
|
// [tailcfg.EarlyNoise]-related stuff
|
||||||
challenge key.ChallengePrivate
|
challenge key.ChallengePrivate
|
||||||
@@ -716,8 +715,6 @@ func (ns *noiseServer) PollNetMapHandler(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ns.nodeKey = nv.NodeKey()
|
|
||||||
|
|
||||||
sess := ns.headscale.newMapSession(req.Context(), mapRequest, writer, nv.AsStruct())
|
sess := ns.headscale.newMapSession(req.Context(), mapRequest, writer, nv.AsStruct())
|
||||||
sess.log.Trace().Caller().Msg("a node sending a MapRequest with Noise protocol")
|
sess.log.Trace().Caller().Msg("a node sending a MapRequest with Noise protocol")
|
||||||
|
|
||||||
@@ -753,8 +750,6 @@ func (ns *noiseServer) RegistrationHandler(
|
|||||||
return ®Req, regErr(err)
|
return ®Req, regErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ns.nodeKey = regReq.NodeKey
|
|
||||||
|
|
||||||
resp, err = ns.headscale.handleRegister(req.Context(), regReq, ns.conn.Peer())
|
resp, err = ns.headscale.handleRegister(req.Context(), regReq, ns.conn.Peer())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if httpErr, ok := errors.AsType[HTTPError](err); ok {
|
if httpErr, ok := errors.AsType[HTTPError](err); ok {
|
||||||
|
|||||||
Reference in new issue
Block a user