diff options
| author | David Göransson <david.goransson@mullvad.net> | 2025-02-20 11:05:10 +0100 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2025-02-25 12:02:00 +0100 |
| commit | 5bf54582abe5c1b8e0660c643feb01385d312f5c (patch) | |
| tree | 2f35df13c379719493ce7bdc77778fed762f9f2c | |
| parent | d270c0284510a3db952f2ce8cb7ead5a5d429ec5 (diff) | |
| download | mullvadvpn-5bf54582abe5c1b8e0660c643feb01385d312f5c.tar.xz mullvadvpn-5bf54582abe5c1b8e0660c643feb01385d312f5c.zip | |
Remove calls to restart tunnel
These calls would later invoke VpnService.Establish in Android. Each
call without properly waiting for routes and halting all API calls
opens for leaking in tunnel ip and some other traffic.
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connected_state.rs | 41 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 31 |
2 files changed, 8 insertions, 64 deletions
diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs index 0ad41b049c..05024554a3 100644 --- a/talpid-core/src/tunnel_state_machine/connected_state.rs +++ b/talpid-core/src/tunnel_state_machine/connected_state.rs @@ -2,8 +2,6 @@ use futures::channel::{mpsc, oneshot}; use futures::stream::Fuse; use futures::StreamExt; -#[cfg(target_os = "android")] -use talpid_tunnel::tun_provider::Error; use talpid_types::net::{AllowedClients, AllowedEndpoint, TunnelParameters}; use talpid_types::tunnel::{ErrorStateCause, FirewallPolicyError}; use talpid_types::{BoxedError, ErrorExt}; @@ -260,14 +258,7 @@ impl ConnectedState { let consequence = if shared_values.set_allow_lan(allow_lan) { #[cfg(target_os = "android")] { - if let Err(_err) = shared_values.restart_tunnel(false) { - self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::StartTunnelError), - ) - } else { - self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) - } + self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) } #[cfg(not(target_os = "android"))] { @@ -298,22 +289,7 @@ impl ConnectedState { let consequence = if shared_values.set_dns_config(servers) { #[cfg(target_os = "android")] { - if let Err(_err) = shared_values.restart_tunnel(false) { - match _err { - Error::InvalidDnsServers(ip_addrs) => self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::InvalidDnsServers( - ip_addrs, - )), - ), - _ => self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::StartTunnelError), - ), - } - } else { - self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) - } + self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) } #[cfg(not(target_os = "android"))] { @@ -385,17 +361,8 @@ impl ConnectedState { #[cfg(target_os = "android")] Some(TunnelCommand::SetExcludedApps(result_tx, paths)) => { if shared_values.set_excluded_paths(paths) { - if let Err(err) = shared_values.restart_tunnel(false) { - let _ = - result_tx.send(Err(crate::split_tunnel::Error::SetExcludedApps(err))); - self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::SplitTunnelError), - ) - } else { - let _ = result_tx.send(Ok(())); - self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) - } + let _ = result_tx.send(Ok(())); + self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) } else { let _ = result_tx.send(Ok(())); SameState(self) diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index 9060787536..4faef9860f 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -386,14 +386,7 @@ impl ConnectingState { let consequence = if shared_values.set_allow_lan(allow_lan) { #[cfg(target_os = "android")] { - if let Err(_err) = shared_values.restart_tunnel(false) { - self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::StartTunnelError), - ) - } else { - self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) - } + self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) } #[cfg(not(target_os = "android"))] self.reset_firewall(shared_values) @@ -427,14 +420,7 @@ impl ConnectingState { let consequence = if shared_values.set_dns_config(servers) { #[cfg(target_os = "android")] { - if let Err(_err) = shared_values.restart_tunnel(false) { - self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::StartTunnelError), - ) - } else { - self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) - } + self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) } #[cfg(not(target_os = "android"))] SameState(self) @@ -484,17 +470,8 @@ impl ConnectingState { #[cfg(target_os = "android")] Some(TunnelCommand::SetExcludedApps(result_tx, paths)) => { if shared_values.set_excluded_paths(paths) { - if let Err(err) = shared_values.restart_tunnel(false) { - let _ = - result_tx.send(Err(crate::split_tunnel::Error::SetExcludedApps(err))); - self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::SplitTunnelError), - ) - } else { - let _ = result_tx.send(Ok(())); - self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) - } + let _ = result_tx.send(Ok(())); + self.disconnect(shared_values, AfterDisconnect::Reconnect(0)) } else { let _ = result_tx.send(Ok(())); SameState(self) |
