From c8fe925020de61b30eec2bc016fb7f45df78dc6c Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 7 Oct 2020 10:17:48 +0200 Subject: [PATCH] device: remove global for roaming escape hatch Signed-off-by: Jason A. Donenfeld --- device/mobilequirks.go | 16 ++++++++++++++++ device/peer.go | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 device/mobilequirks.go diff --git a/device/mobilequirks.go b/device/mobilequirks.go new file mode 100644 index 0000000..fc0b386 --- /dev/null +++ b/device/mobilequirks.go @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2020 WireGuard LLC. All Rights Reserved. + */ + +package device + +func (device *Device) DisableSomeRoamingForBrokenMobileSemantics() { + device.peers.RLock() + for _, peer := range device.peers.keyMap { + peer.Lock() + defer peer.Unlock() + peer.disableRoaming = peer.endpoint != nil + } + device.peers.RUnlock() +} \ No newline at end of file diff --git a/device/peer.go b/device/peer.go index d13acd9..8cb0dc2 100644 --- a/device/peer.go +++ b/device/peer.go @@ -28,6 +28,7 @@ type Peer struct { device *Device endpoint conn.Endpoint persistentKeepaliveInterval uint16 + disableRoaming bool // These fields are accessed with atomic operations, which must be // 64-bit aligned even on 32-bit platforms. Go guarantees that an @@ -290,10 +291,9 @@ func (peer *Peer) Stop() { peer.ZeroAndFlushAll() } -var RoamingDisabled bool func (peer *Peer) SetEndpointFromPacket(endpoint conn.Endpoint) { - if RoamingDisabled { + if peer.disableRoaming { return } peer.Lock()