diff options
| author | Emīls <emils@mullvad.net> | 2021-02-15 10:52:58 +0000 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2021-02-15 10:52:58 +0000 |
| commit | f00c38e8e90b85fb9c397d07aeb21e1c08e17e1f (patch) | |
| tree | e1fe19fa785c8ee1bfb46cdd0896a813ed6991d5 | |
| parent | b6c066c8bc86deaf6b1d80296bdbd9e3fd3c5c77 (diff) | |
| download | mullvadvpn-f00c38e8e90b85fb9c397d07aeb21e1c08e17e1f.tar.xz mullvadvpn-f00c38e8e90b85fb9c397d07aeb21e1c08e17e1f.zip | |
Stop applying IPv6 routes for OpenVPN
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rw-r--r-- | talpid-core/src/routing/mod.rs | 3 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/openvpn/mod.rs | 7 |
3 files changed, 11 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index e0939c8ed8..1d9029e278 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,9 @@ Line wrap the file at 100 chars. Th ### Fixed - Fix delay in showing/hiding update notification when toggling beta program. +#### Linux +- Fix crash when trying to apply IPv6 rotues for OpenVPN when IPv6 is disabled. + ## [2021.1] - 2021-02-10 ### Fixed diff --git a/talpid-core/src/routing/mod.rs b/talpid-core/src/routing/mod.rs index d1508f7c5f..a8491a8588 100644 --- a/talpid-core/src/routing/mod.rs +++ b/talpid-core/src/routing/mod.rs @@ -64,7 +64,8 @@ impl fmt::Display for Route { /// default route. #[derive(Debug, Hash, Eq, PartialEq, Clone)] pub struct RequiredRoute { - prefix: IpNetwork, + /// Route's prefix + pub prefix: IpNetwork, node: NetNode, #[cfg(target_os = "linux")] table_id: u32, diff --git a/talpid-core/src/tunnel/openvpn/mod.rs b/talpid-core/src/tunnel/openvpn/mod.rs index 38a1d26d22..3446c6d0d6 100644 --- a/talpid-core/src/tunnel/openvpn/mod.rs +++ b/talpid-core/src/tunnel/openvpn/mod.rs @@ -295,11 +295,16 @@ impl OpenVpnMonitor<OpenVpnCommand> { #[cfg(target_os = "linux")] let route_manager_handle = route_manager.handle().map_err(Error::SetupRoutingError)?; + let ipv6_enabled = params.generic_options.enable_ipv6; let on_openvpn_event = move |event, env: HashMap<String, String>| { #[cfg(target_os = "linux")] if event == openvpn_plugin::EventType::Up { tokio::task::block_in_place(|| { - let routes = extract_routes(&env).unwrap(); + let routes = extract_routes(&env) + .unwrap() + .into_iter() + .filter(|route| route.prefix.is_ipv4() || ipv6_enabled) + .collect(); let route_manager_handle = route_manager_handle.clone(); if let Err(error) = route_manager_handle.add_routes(routes) { log::error!("{}", error.display_chain()); |
