diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-03-18 18:14:42 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-03-18 18:14:42 +0100 |
| commit | 62c1f943517cc2ac28ea67e7d08988d59fd23965 (patch) | |
| tree | 8822a1e008c2087a9fd333880e803900d297c314 | |
| parent | bcc50960a73d36224948d5b953cc8e2023ee3371 (diff) | |
| parent | 89938bf89ced0d0562783b87b91c658056d3ebd3 (diff) | |
| download | mullvadvpn-62c1f943517cc2ac28ea67e7d08988d59fd23965.tar.xz mullvadvpn-62c1f943517cc2ac28ea67e7d08988d59fd23965.zip | |
Merge branch 'fix-macos-cpu-issue' into main
| -rw-r--r-- | CHANGELOG.md | 3 | ||||
| -rw-r--r-- | Cargo.lock | 206 | ||||
| -rw-r--r-- | deny.toml | 3 | ||||
| -rw-r--r-- | mullvad-daemon/src/logging.rs | 6 | ||||
| -rw-r--r-- | talpid-core/Cargo.toml | 5 | ||||
| -rw-r--r-- | talpid-core/src/resolver.rs | 16 |
6 files changed, 129 insertions, 110 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 82aafb2d59..725329acba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,9 @@ Line wrap the file at 100 chars. Th - Fix pointless API access method rotations for concurrent requests. - Fix daemon rotating logs on startup even if another daemon is already running. +### macOS +- Fix bug that caused high CPU usage due to an infinite loop. + ### Security #### Android - Change from singleTask to singleInstance to fix Task Affinity Vulnerability in Android 8. diff --git a/Cargo.lock b/Cargo.lock index cf5dece12a..83c9a72053 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -167,6 +167,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] +name = "async-recursion" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30c5ef0ede93efbf733c1a727f3b6b5a1060bbedd5600183e66f6e4be4af0ec5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.51", +] + +[[package]] name = "async-stream" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -378,7 +389,7 @@ dependencies = [ "serde_json", "syn 1.0.109", "tempfile", - "toml 0.5.11", + "toml", ] [[package]] @@ -818,15 +829,6 @@ dependencies = [ ] [[package]] -name = "drain" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f1a0abf3fcefad9b4dd0e414207a7408e12b68414a01e6bb19b897d5bd7632d" -dependencies = [ - "tokio", -] - -[[package]] name = "duct" version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1241,6 +1243,74 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] +name = "hickory-proto" +version = "0.24.0" +source = "git+https://github.com/hickory-dns/hickory-dns?rev=9e8f8c67fbcb6d2985503027362a3fb022529802#9e8f8c67fbcb6d2985503027362a3fb022529802" +dependencies = [ + "async-recursion", + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.5.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "serde", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.0" +source = "git+https://github.com/hickory-dns/hickory-dns?rev=9e8f8c67fbcb6d2985503027362a3fb022529802#9e8f8c67fbcb6d2985503027362a3fb022529802" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand 0.8.5", + "resolv-conf", + "serde", + "smallvec", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "hickory-server" +version = "0.24.0" +source = "git+https://github.com/hickory-dns/hickory-dns?rev=9e8f8c67fbcb6d2985503027362a3fb022529802#9e8f8c67fbcb6d2985503027362a3fb022529802" +dependencies = [ + "async-trait", + "bytes", + "cfg-if", + "enum-as-inner", + "futures-util", + "hickory-proto", + "hickory-resolver", + "ipnet", + "prefix-trie", + "serde", + "thiserror", + "time", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] name = "hkdf" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1407,6 +1477,16 @@ dependencies = [ ] [[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1497,6 +1577,9 @@ name = "ipnet" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +dependencies = [ + "serde", +] [[package]] name = "ipnetwork" @@ -2656,6 +2739,16 @@ dependencies = [ ] [[package]] +name = "prefix-trie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fe48f29e6e6fcf123d0d03d63028dbe4c4a738023d35d525df4882f4929418" +dependencies = [ + "ipnet", + "num-traits", +] + +[[package]] name = "prettyplease" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3175,15 +3268,6 @@ dependencies = [ ] [[package]] -name = "serde_spanned" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" -dependencies = [ - "serde", -] - -[[package]] name = "serde_urlencoded" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3306,7 +3390,7 @@ dependencies = [ "cfg-if", "futures", "hyper", - "idna", + "idna 0.4.0", "ipnet", "iprange", "json5", @@ -3551,6 +3635,8 @@ dependencies = [ "chrono", "duct", "futures", + "hickory-proto", + "hickory-server", "inotify 0.10.2", "ipnetwork", "jnix", @@ -3580,8 +3666,6 @@ dependencies = [ "tokio", "tonic-build", "triggered", - "trust-dns-proto", - "trust-dns-server", "which", "widestring", "windows-service", @@ -3969,9 +4053,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", @@ -3991,40 +4075,6 @@ dependencies = [ ] [[package]] -name = "toml" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0a3ab2091e52d7299a39d098e200114a972df0a7724add02a273aa9aada592" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.0.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - -[[package]] name = "tonic" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4160,11 +4210,10 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna", + "idna 0.4.0", "ipnet", "once_cell", "rand 0.8.5", - "serde", "smallvec", "thiserror", "tinyvec", @@ -4187,7 +4236,6 @@ dependencies = [ "parking_lot", "rand 0.8.5", "resolv-conf", - "serde", "smallvec", "thiserror", "tokio", @@ -4196,29 +4244,6 @@ dependencies = [ ] [[package]] -name = "trust-dns-server" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2863cefc06d1d5605ea937bfd8939e23687bb44dd5d136217ad9378582f9cc" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "drain", - "enum-as-inner", - "futures-executor", - "futures-util", - "serde", - "thiserror", - "time", - "tokio", - "toml 0.7.7", - "tracing", - "trust-dns-proto", - "trust-dns-resolver", -] - -[[package]] name = "try-lock" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4337,7 +4362,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", - "idna", + "idna 0.4.0", "percent-encoding", "serde", ] @@ -4736,15 +4761,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] -name = "winnow" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" -dependencies = [ - "memchr", -] - -[[package]] name = "winreg" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4770,7 +4786,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" dependencies = [ - "toml 0.5.11", + "toml", ] [[package]] @@ -106,7 +106,8 @@ allow-registry = ["https://github.com/rust-lang/crates.io-index"] # If we need to temporarily depend on a git repository in our Rust dependency tree, # it has to be added here. We should try to keep this list minimal. Having git # dependencies is not recommended. -allow-git = [] +# TODO: Remove git dependency for hickory-dns after new release +allow-git = ["https://github.com/hickory-dns/hickory-dns"] [sources.allow-org] # 1 or more github.com organizations to allow git sources for diff --git a/mullvad-daemon/src/logging.rs b/mullvad-daemon/src/logging.rs index c31c9b868c..646593cdac 100644 --- a/mullvad-daemon/src/logging.rs +++ b/mullvad-daemon/src/logging.rs @@ -40,9 +40,9 @@ pub const SILENCED_CRATES: &[&str] = &[ "rustls", "netlink_sys", "tracing", - "trust_dns_proto", - "trust_dns_server", - "trust_dns_resolver", + "hickory_proto", + "hickory_server", + "hickory_resolver", ]; const SLIGHTLY_SILENCED_CRATES: &[&str] = &["mnl", "nftnl", "udp_over_tcp"]; diff --git a/talpid-core/Cargo.toml b/talpid-core/Cargo.toml index dcd0c5af4c..343873e600 100644 --- a/talpid-core/Cargo.toml +++ b/talpid-core/Cargo.toml @@ -52,9 +52,8 @@ pfctl = "0.4.4" subslice = "0.2" system-configuration = "0.5.1" talpid-time = { path = "../talpid-time" } -trust-dns-proto = "0.23.0" -trust-dns-server = { version = "0.23.0", features = ["resolver"] } - +hickory-proto = { git = "https://github.com/hickory-dns/hickory-dns", rev = "9e8f8c67fbcb6d2985503027362a3fb022529802" } +hickory-server = { git = "https://github.com/hickory-dns/hickory-dns", rev = "9e8f8c67fbcb6d2985503027362a3fb022529802", features = ["resolver"] } [target.'cfg(windows)'.dependencies] bitflags = "1.2" diff --git a/talpid-core/src/resolver.rs b/talpid-core/src/resolver.rs index 4fffced977..71841061bf 100644 --- a/talpid-core/src/resolver.rs +++ b/talpid-core/src/resolver.rs @@ -12,12 +12,11 @@ use futures::{ SinkExt, StreamExt, }; -use once_cell::sync::Lazy; -use trust_dns_proto::{ +use hickory_proto::{ op::LowerQuery, rr::{LowerName, RecordType}, }; -use trust_dns_server::{ +use hickory_server::{ authority::{ EmptyLookup, LookupObject, MessageRequest, MessageResponse, MessageResponseBuilder, }, @@ -29,6 +28,7 @@ use trust_dns_server::{ server::{Request, RequestHandler, ResponseHandler, ResponseInfo}, ServerFuture, }; +use once_cell::sync::Lazy; const ALLOWED_RECORD_TYPES: &[RecordType] = &[RecordType::A, RecordType::CNAME]; const CAPTIVE_PORTAL_DOMAINS: &[&str] = &["captive.apple.com", "netcts.cdn-apple.com"]; @@ -187,7 +187,7 @@ type LookupResponse<'a> = MessageResponse< std::iter::Empty<&'a Record>, >; -/// An implementation of [trust_dns_server::server::RequestHandler] that forwards queries to +/// An implementation of [hickory_server::server::RequestHandler] that forwards queries to /// `FilteringResolver`. struct ResolverImpl { tx: Weak<mpsc::Sender<ResolverMessage>>, @@ -279,17 +279,17 @@ impl LookupObject for ForwardLookup { #[cfg(test)] mod test { use super::*; - use std::{mem, net::UdpSocket, thread, time::Duration}; - use trust_dns_server::resolver::{ + use hickory_server::resolver::{ config::{NameServerConfigGroup, ResolverConfig, ResolverOpts}, TokioAsyncResolver, }; + use std::{mem, net::UdpSocket, thread, time::Duration}; async fn start_resolver() -> ResolverHandle { super::start_resolver().await.unwrap() } - fn get_test_resolver(port: u16) -> trust_dns_server::resolver::TokioAsyncResolver { + fn get_test_resolver(port: u16) -> hickory_server::resolver::TokioAsyncResolver { let resolver_config = ResolverConfig::from_parts( None, vec![], @@ -308,7 +308,7 @@ mod test { for domain in &*ALLOWED_DOMAINS { test_resolver.lookup(domain, RecordType::A).await?; } - Ok::<(), trust_dns_server::resolver::error::ResolveError>(()) + Ok::<(), hickory_server::resolver::error::ResolveError>(()) }) .expect("Resolution of domains failed"); } |
