From b34625f5111358ab0263b446a1774956f2c171e8 Mon Sep 17 00:00:00 2001 From: Andrej Mihajlov Date: Wed, 2 Dec 2020 13:53:58 +0100 Subject: [PATCH] WireGuardKit: Only assign self.settingsGenerator upon success to set tunnel network settings to avoid inconsistent state Signed-off-by: Andrej Mihajlov --- WireGuardKit/Sources/WireGuardKit/WireGuardAdapter.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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) -- 2.47.2