aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2020-12-02 13:53:58 +0100
committerAndrej Mihajlov <and@mullvad.net>2020-12-03 13:22:52 +0100
commitb34625f5111358ab0263b446a1774956f2c171e8 (patch)
treea887981e629cb2c2e5717eada91c03d840373882
parentWireGuardKit: Remove handleLogLine from WireGuardAdapter (diff)
downloadwireguard-apple-b34625f5111358ab0263b446a1774956f2c171e8.tar.xz
wireguard-apple-b34625f5111358ab0263b446a1774956f2c171e8.zip
WireGuardKit: Only assign self.settingsGenerator upon success to set tunnel network settings to avoid inconsistent state
Signed-off-by: Andrej Mihajlov <and@mullvad.net>
-rw-r--r--WireGuardKit/Sources/WireGuardKit/WireGuardAdapter.swift6
1 files changed, 5 insertions, 1 deletions
diff --git a/WireGuardKit/Sources/WireGuardKit/WireGuardAdapter.swift b/WireGuardKit/Sources/WireGuardKit/WireGuardAdapter.swift
index c5a6e2c..358ab53 100644
--- a/WireGuardKit/Sources/WireGuardKit/WireGuardAdapter.swift
+++ b/WireGuardKit/Sources/WireGuardKit/WireGuardAdapter.swift
@@ -263,7 +263,6 @@ public class WireGuardAdapter {
let settingsGenerator = PacketTunnelSettingsGenerator(tunnelConfiguration: tunnelConfiguration, resolvedEndpoints: resolvedEndpoints)
let networkSettings = settingsGenerator.generateNetworkSettings()
- self.settingsGenerator = settingsGenerator
var systemError: Error?
let condition = NSCondition()
@@ -284,6 +283,11 @@ public class WireGuardAdapter {
if condition.wait(until: Date().addingTimeInterval(setTunnelNetworkSettingsTimeout)) {
let returnError = systemError.map { WireGuardAdapterError.setNetworkSettings($0) }
+ // Only assign `settingsGenerator` when `setTunnelNetworkSettings` succeeded.
+ if returnError == nil {
+ self.settingsGenerator = settingsGenerator
+ }
+
completionHandler(settingsGenerator, returnError)
} else {
completionHandler(nil, .setNetworkSettingsTimeout)