diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-05-07 13:41:33 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-05-13 17:56:36 +0200 |
| commit | b17c9ae4eca4c869a0ff9cc2ea5c494cf6e3b975 (patch) | |
| tree | bb6b8f36654d94048e967e2e91013461733f9d5a | |
| parent | 256cfc5f85b93f72b264ce37ba4af891cd095864 (diff) | |
| download | mullvadvpn-b17c9ae4eca4c869a0ff9cc2ea5c494cf6e3b975.tar.xz mullvadvpn-b17c9ae4eca4c869a0ff9cc2ea5c494cf6e3b975.zip | |
Prevent RouteManager from dying unexpectedly
| -rw-r--r-- | talpid-core/src/routing/linux.rs | 11 | ||||
| -rw-r--r-- | talpid-core/src/routing/unix.rs | 11 |
2 files changed, 17 insertions, 5 deletions
diff --git a/talpid-core/src/routing/linux.rs b/talpid-core/src/routing/linux.rs index d9f272639d..1da874a507 100644 --- a/talpid-core/src/routing/linux.rs +++ b/talpid-core/src/routing/linux.rs @@ -1,5 +1,7 @@ use crate::routing::{imp::RouteManagerCommand, NetNode, Node, RequiredRoute, Route}; +use talpid_types::ErrorExt; + use ipnetwork::IpNetwork; use std::{ collections::{BTreeMap, HashSet}, @@ -426,7 +428,9 @@ impl RouteManagerImplInner { self.process_command(command).await?; }, (route_change, socket) = self.messages.select_next_some().fuse() => { - self.process_netlink_message(route_change).await?; + if let Err(error) = self.process_netlink_message(route_change).await { + log::error!("{}", error.display_chain_with_msg("Failed to process netlink message")); + } } }; } @@ -439,11 +443,12 @@ impl RouteManagerImplInner { self.cleanup_routes().await; log::trace!("Route manager done"); let _ = shutdown_signal.send(()); - return Ok(()); } RouteManagerCommand::AddRoutes(routes) => { log::debug!("Adding routes: {:?}", routes); - self.add_required_routes(routes).await?; + if let Err(error) = self.add_required_routes(routes).await { + log::error!("{}", error.display_chain_with_msg("Failed to add routes")); + } } RouteManagerCommand::ClearRoutes => { log::debug!("Clearing routes"); diff --git a/talpid-core/src/routing/unix.rs b/talpid-core/src/routing/unix.rs index 151c642c41..597a203deb 100644 --- a/talpid-core/src/routing/unix.rs +++ b/talpid-core/src/routing/unix.rs @@ -108,7 +108,12 @@ impl RouteManager { /// Applies the given routes until [`RouteManager::stop`] is called. pub fn add_routes(&mut self, routes: HashSet<RequiredRoute>) -> Result<(), Error> { if let Some(tx) = &self.manage_tx { - let _ = tx.unbounded_send(RouteManagerCommand::AddRoutes(routes)); + if tx + .unbounded_send(RouteManagerCommand::AddRoutes(routes)) + .is_err() + { + return Err(Error::RouteManagerDown); + } Ok(()) } else { Err(Error::RouteManagerDown) @@ -119,7 +124,9 @@ impl RouteManager { /// [`RouteManager::add_routes`]. pub fn clear_routes(&mut self) -> Result<(), Error> { if let Some(tx) = &self.manage_tx { - let _ = tx.unbounded_send(RouteManagerCommand::ClearRoutes); + if tx.unbounded_send(RouteManagerCommand::ClearRoutes).is_err() { + return Err(Error::RouteManagerDown); + } Ok(()) } else { Err(Error::RouteManagerDown) |
