summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-02-20 11:05:10 +0100
committerDavid Göransson <david.goransson@mullvad.net>2025-02-25 12:02:00 +0100
commit5bf54582abe5c1b8e0660c643feb01385d312f5c (patch)
tree2f35df13c379719493ce7bdc77778fed762f9f2c
parentd270c0284510a3db952f2ce8cb7ead5a5d429ec5 (diff)
downloadmullvadvpn-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.rs41
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs31
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)