From 20715355ff85464853c753b784e0ce6e483f7e15 Mon Sep 17 00:00:00 2001 From: Aviram Hassan Date: Mon, 5 Aug 2024 13:29:16 +0300 Subject: [PATCH] Fix execve (#2628) * .. * maybe fix execve * .. * format * .. * .. * fix locks * Apply suggestions from code review Co-authored-by: Dmitry Dodzin --------- Co-authored-by: Dmitry Dodzin --- Cargo.lock | 818 +++++++++++++------------- changelog.d/2624.fixed.md | 1 + mirrord/config/src/experimental.rs | 2 +- mirrord/layer/Cargo.toml | 1 - mirrord/layer/src/common.rs | 7 +- mirrord/layer/src/exec_hooks/hooks.rs | 36 +- mirrord/layer/src/file.rs | 8 +- mirrord/layer/src/file/open_dirs.rs | 25 +- mirrord/layer/src/file/ops.rs | 13 +- mirrord/layer/src/lib.rs | 7 +- mirrord/layer/src/socket.rs | 27 +- mirrord/layer/src/socket/hooks.rs | 59 +- mirrord/layer/src/socket/ops.rs | 92 +-- 13 files changed, 583 insertions(+), 513 deletions(-) create mode 100644 changelog.d/2624.fixed.md diff --git a/Cargo.lock b/Cargo.lock index fd7558ec9e4..eb836a18bd2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "futures-core", "futures-sink", @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.7.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb9843d84c775696c37d9a418bbb01b932629d01870722c0f13eb3f95e2536d" +checksum = "3ae682f693a9cd7b058f2b0b5d9a6d7728a8555779bedbbc35dd88528611d020" dependencies = [ "actix-codec", "actix-rt", @@ -31,7 +31,7 @@ dependencies = [ "actix-utils", "ahash", "base64 0.22.1", - "bitflags 2.5.0", + "bitflags 2.6.0", "brotli", "bytes", "bytestring", @@ -65,7 +65,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -104,7 +104,7 @@ dependencies = [ "actix-utils", "futures-core", "futures-util", - "mio", + "mio 0.8.11", "socket2", "tokio", "tracing", @@ -133,9 +133,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.7.0" +version = "4.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6316df3fa569627c98b12557a8b6ff0674e5be4bb9b5e4ae2550ddb4964ed6" +checksum = "1988c02af8d2b718c05bc4aeb6a66395b7cdf32858c2c71131e5637a8c05a9ff" dependencies = [ "actix-codec", "actix-http", @@ -181,7 +181,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -259,9 +259,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -274,33 +274,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -336,7 +336,7 @@ dependencies = [ "apple-xar", "base64 0.21.7", "bcder", - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "chrono", "clap", @@ -471,11 +471,11 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ad1373757efa0f70ec53939aabc7152e1591cb485208052993070ac8d2429d" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" dependencies = [ - "asn1-rs-derive 0.5.0", + "asn1-rs-derive 0.5.1", "asn1-rs-impl 0.2.0", "displaydoc", "nom", @@ -499,13 +499,13 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "synstructure 0.13.1", ] @@ -528,7 +528,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -582,18 +582,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -619,9 +619,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "aws-lc-rs" -version = "1.7.3" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7d844e282b4b56750b2d4e893b2205581ded8709fddd2b6aa5418c150ca877" +checksum = "4ae74d9bd0a7530e8afd1770739ad34b36838829d6ad61818f9230f683f5ad77" dependencies = [ "aws-lc-sys", "mirai-annotations", @@ -631,9 +631,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.18.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a2c29203f6bf296d01141cc8bb9dbd5ecd4c27843f2ee0767bcd5985a927da" +checksum = "0f0e249228c6ad2d240c2dc94b714d711629d52bad946075d8e9b2f5391f0703" dependencies = [ "bindgen", "cc", @@ -657,7 +657,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "itoa", "matchit", "memchr", @@ -684,9 +684,9 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "itoa", "matchit", @@ -736,7 +736,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", @@ -769,7 +769,7 @@ dependencies = [ "cfg-if", "libc", "miniz_oxide", - "object 0.36.0", + "object 0.36.2", "rustc-demangle", ] @@ -847,7 +847,7 @@ version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -860,7 +860,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.66", + "syn 2.0.72", "which 4.4.2", ] @@ -887,9 +887,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitvec" @@ -945,7 +945,7 @@ dependencies = [ "hex", "http 1.1.0", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-named-pipe", "hyper-util", "hyperlocal-next", @@ -1007,9 +1007,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", "serde", @@ -1034,9 +1034,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" [[package]] name = "byteorder" @@ -1046,9 +1046,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "bytesize" @@ -1109,13 +1109,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.99" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" dependencies = [ "jobserver", "libc", - "once_cell", ] [[package]] @@ -1151,7 +1150,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -1199,9 +1198,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.7" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" +checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" dependencies = [ "clap_builder", "clap_derive", @@ -1209,9 +1208,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.7" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" +checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" dependencies = [ "anstream", "anstyle", @@ -1221,30 +1220,30 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.5" +version = "4.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2020fa13af48afc65a9a87335bda648309ab3d154cd03c7ff95b378c7ed39c4" +checksum = "a8670053e87c316345e384ca1f3eba3006fc6355ed8b8a1140d104e109e3df34" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.5.5" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "cmake" @@ -1257,9 +1256,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "concurrent-queue" @@ -1538,7 +1537,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1570,14 +1569,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "darling" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -1585,27 +1584,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "darling_macro" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1644,7 +1643,7 @@ version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" dependencies = [ - "asn1-rs 0.6.1", + "asn1-rs 0.6.2", "displaydoc", "nom", "num-bigint", @@ -1691,7 +1690,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1701,7 +1700,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ "derive_builder_core", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1714,7 +1713,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1807,13 +1806,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1846,9 +1845,9 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -1871,9 +1870,9 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "elliptic-curve" @@ -1924,7 +1923,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -1936,14 +1935,14 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ "log", "regex", @@ -1964,9 +1963,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ "anstream", "anstyle", @@ -2105,7 +2104,7 @@ dependencies = [ "atomic", "pear", "serde", - "toml 0.8.14", + "toml 0.8.19", "uncased", "version_check", ] @@ -2158,9 +2157,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ "crc32fast", "miniz_oxide", @@ -2198,9 +2197,9 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frida-build" -version = "0.13.6" +version = "0.13.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c30ea8305152e97a11228532ece476b8174ff8454e63919fc7c7c60263ad5342" +checksum = "64e0adc856243a8980b9972cc9d589bde146e17d53e383519baf7eabbaf28d94" dependencies = [ "reqwest 0.12.5", "tar", @@ -2209,9 +2208,9 @@ dependencies = [ [[package]] name = "frida-gum" -version = "0.13.6" +version = "0.13.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38241a5db26274a8873d675d6d4eeaffb5d23db41bab57472a07d56558d54687" +checksum = "2c618706fa0e47c5b21c7da403bbfb4df12ff9c63f573f530af4ace893d644ea" dependencies = [ "cstr_core", "frida-gum-sys", @@ -2223,9 +2222,9 @@ dependencies = [ [[package]] name = "frida-gum-sys" -version = "0.13.6" +version = "0.13.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ea64581ea1b0128e36010edd431398f7198c78c9c8acc5a4a162cfc6f51fa9" +checksum = "f1f8fe654adc5b68f301cec314a6610d1c3124a7d046a2e3013060b8ae24d959" dependencies = [ "bindgen", "frida-build", @@ -2310,7 +2309,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -2414,7 +2413,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "ignore", "walkdir", ] @@ -2453,7 +2452,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.3.0", "slab", "tokio", "tokio-util", @@ -2472,7 +2471,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.3.0", "slab", "tokio", "tokio-util", @@ -2663,9 +2662,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -2680,7 +2679,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -2723,9 +2722,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.29" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", @@ -2747,16 +2746,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", "futures-util", "h2 0.4.5", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", @@ -2776,11 +2775,11 @@ dependencies = [ "futures-util", "headers", "http 1.1.0", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-rustls 0.27.2", "hyper-util", "pin-project-lite", - "rustls-native-certs 0.7.0", + "rustls-native-certs 0.7.1", "tokio", "tokio-rustls 0.26.0", "tower-service", @@ -2793,7 +2792,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" dependencies = [ "hex", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "pin-project-lite", "tokio", @@ -2809,7 +2808,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.29", + "hyper 0.14.30", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", @@ -2823,11 +2822,11 @@ checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "log", - "rustls 0.23.10", - "rustls-native-certs 0.7.0", + "rustls 0.23.12", + "rustls-native-certs 0.7.1", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -2843,7 +2842,7 @@ checksum = "51c227614c208f7e7c2e040526912604a1a957fe467c9c2f5b06c5d032337dab" dependencies = [ "async-socks5", "http 1.1.0", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "thiserror", "tokio", @@ -2856,7 +2855,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.29", + "hyper 0.14.30", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -2868,7 +2867,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" dependencies = [ - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "pin-project-lite", "tokio", @@ -2877,16 +2876,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body 1.0.1", + "hyper 1.4.1", "pin-project-lite", "socket2", "tokio", @@ -2903,7 +2902,7 @@ checksum = "acf569d43fa9848e510358c07b80f4adf34084ddc28c6a4a651ee8474c070dcc" dependencies = [ "hex", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "pin-project-lite", "tokio", @@ -2988,9 +2987,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -3100,17 +3099,17 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "issue1317" version = "3.112.0" dependencies = [ "actix-web", - "env_logger 0.11.3", - "hyper 1.3.1", + "env_logger 0.11.5", + "hyper 1.4.1", "tokio", "tracing", ] @@ -3188,9 +3187,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -3319,9 +3318,9 @@ dependencies = [ "futures", "home", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-http-proxy", "hyper-rustls 0.27.2", "hyper-socks2", @@ -3332,8 +3331,8 @@ dependencies = [ "kube-core", "pem", "rand", - "rustls 0.23.10", - "rustls-pemfile 2.1.2", + "rustls 0.23.12", + "rustls-pemfile 2.1.3", "secrecy", "serde", "serde_json", @@ -3372,7 +3371,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -3410,11 +3409,11 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.5.2", + "spin", ] [[package]] @@ -3431,12 +3430,12 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -3451,16 +3450,10 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", ] -[[package]] -name = "line-wrap" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" - [[package]] name = "linked-hash-map" version = "0.5.6" @@ -3506,9 +3499,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru-cache" @@ -3569,7 +3562,7 @@ dependencies = [ "glob", "rand", "regex", - "syn 2.0.66", + "syn 2.0.72", "thiserror", "tracing", "tracing-subscriber", @@ -3627,7 +3620,7 @@ checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -3683,6 +3676,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + [[package]] name = "mirai-annotations" version = "1.12.0" @@ -3721,7 +3726,7 @@ dependencies = [ "rand", "regex", "reqwest 0.12.5", - "rustls 0.23.10", + "rustls 0.23.12", "semver 1.0.23", "serde", "serde_json", @@ -3732,7 +3737,7 @@ dependencies = [ "tracing", "tracing-appender", "tracing-subscriber", - "which 6.0.1", + "which 6.0.2", ] [[package]] @@ -3756,7 +3761,7 @@ dependencies = [ "http 1.1.0", "http-body-util", "httparse", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "iptables", "k8s-cri", @@ -3773,7 +3778,7 @@ dependencies = [ "rcgen", "regex", "rstest", - "rustls 0.23.10", + "rustls 0.23.12", "semver 1.0.23", "serde", "serde_json", @@ -3833,7 +3838,7 @@ name = "mirrord-config" version = "3.112.0" dependencies = [ "bimap", - "bitflags 2.5.0", + "bitflags 2.6.0", "ipnet", "k8s-openapi", "mirrord-analytics", @@ -3846,7 +3851,7 @@ dependencies = [ "serde_yaml", "tera", "thiserror", - "toml 0.8.14", + "toml 0.8.19", "tracing", ] @@ -3857,7 +3862,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -3883,7 +3888,7 @@ dependencies = [ "bytes", "futures", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "mirrord-analytics", "mirrord-config", @@ -3917,8 +3922,8 @@ dependencies = [ "actix-codec", "base64 0.22.1", "futures", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body 1.0.1", + "hyper 1.4.1", "k8s-openapi", "kube", "mirrord-config", @@ -3950,7 +3955,6 @@ dependencies = [ "bytes", "chrono", "ctor", - "dashmap", "errno 0.3.9", "exec", "fancy-regex", @@ -3959,8 +3963,8 @@ dependencies = [ "futures", "hashbrown 0.14.5", "hickory-resolver", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body 1.0.1", + "hyper 1.4.1", "itertools 0.13.0", "k8s-openapi", "libc", @@ -4000,7 +4004,7 @@ version = "3.112.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4010,7 +4014,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "semver 1.0.23", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4026,7 +4030,7 @@ dependencies = [ "futures", "http 1.1.0", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "k8s-openapi", "kube", @@ -4071,7 +4075,7 @@ dependencies = [ "hickory-resolver", "http-body-util", "http-serde", - "hyper 1.3.1", + "hyper 1.4.1", "libc", "mirrord-macros", "nix 0.29.0", @@ -4090,12 +4094,12 @@ version = "3.112.0" dependencies = [ "apple-codesign", "memchr", - "object 0.36.0", + "object 0.36.2", "once_cell", "tempfile", "thiserror", "tracing", - "which 6.0.1", + "which 6.0.2", ] [[package]] @@ -4122,7 +4126,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4150,7 +4154,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "libc", ] @@ -4161,7 +4165,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "cfg_aliases", "libc", @@ -4220,9 +4224,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -4268,7 +4272,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4311,16 +4315,6 @@ dependencies = [ "libm", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "number_prefix" version = "0.4.0" @@ -4336,32 +4330,36 @@ dependencies = [ "crc32fast", "flate2", "hashbrown 0.14.5", - "indexmap 2.2.6", + "indexmap 2.3.0", "memchr", "ruzstd 0.5.0", ] [[package]] name = "object" -version = "0.36.0" +version = "0.36.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" dependencies = [ "flate2", "memchr", - "ruzstd 0.6.0", + "ruzstd 0.7.0", ] [[package]] name = "oci-spec" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e423c4f827362c0d8d8da4b1f571270f389ebde73bcd3240a3d23c6d6f61d0f0" +checksum = "3f5a3fe998d50101ae009351fec56d88a69f4ed182e11000e711068c2f5abf72" dependencies = [ "derive_builder", "getset", + "once_cell", + "regex", "serde", "serde_json", + "strum", + "strum_macros", "thiserror", ] @@ -4380,7 +4378,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c958dd45046245b9c3c2547369bb634eb461670b2e7e0de552905801a648d1d" dependencies = [ - "asn1-rs 0.6.1", + "asn1-rs 0.6.2", ] [[package]] @@ -4489,9 +4487,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall 0.5.3", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4529,7 +4527,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4559,9 +4557,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" dependencies = [ "memchr", "thiserror", @@ -4570,9 +4568,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" +checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" dependencies = [ "pest", "pest_generator", @@ -4580,22 +4578,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "pest_meta" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" dependencies = [ "once_cell", "pest", @@ -4609,7 +4607,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.3.0", ] [[package]] @@ -4667,7 +4665,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4717,13 +4715,12 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64 0.21.7", - "indexmap 2.2.6", - "line-wrap", + "base64 0.22.1", + "indexmap 2.3.0", "quick-xml", "serde", "time", @@ -4774,7 +4771,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4822,9 +4819,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "powerfmt" @@ -4834,15 +4831,18 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "predicates" -version = "3.1.0" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" dependencies = [ "anstyle", "predicates-core", @@ -4850,15 +4850,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", @@ -4871,7 +4871,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -4932,9 +4932,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -4947,7 +4947,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "version_check", "yansi", ] @@ -4979,7 +4979,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.66", + "syn 2.0.72", "tempfile", ] @@ -4993,7 +4993,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -5013,9 +5013,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] @@ -5031,7 +5031,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.10", + "rustls 0.23.12", "thiserror", "tokio", "tracing", @@ -5047,7 +5047,7 @@ dependencies = [ "rand", "ring", "rustc-hash", - "rustls 0.23.10", + "rustls 0.23.12", "slab", "thiserror", "tinyvec", @@ -5056,14 +5056,13 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" dependencies = [ "libc", "once_cell", "socket2", - "tracing", "windows-sys 0.52.0", ] @@ -5223,11 +5222,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -5243,9 +5242,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -5311,7 +5310,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-rustls 0.24.2", "ipnet", "js-sys", @@ -5352,9 +5351,9 @@ dependencies = [ "futures-util", "h2 0.4.5", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-rustls 0.27.2", "hyper-util", "ipnet", @@ -5365,9 +5364,9 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.10", - "rustls-native-certs 0.7.0", - "rustls-pemfile 2.1.2", + "rustls 0.23.12", + "rustls-native-certs 0.7.1", + "rustls-pemfile 2.1.3", "rustls-pki-types", "serde", "serde_json", @@ -5405,7 +5404,7 @@ dependencies = [ "cfg-if", "getrandom", "libc", - "spin 0.9.8", + "spin", "untrusted", "windows-sys 0.52.0", ] @@ -5456,7 +5455,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.66", + "syn 2.0.72", "unicode-ident", ] @@ -5525,7 +5524,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno 0.3.9", "libc", "linux-raw-sys", @@ -5553,23 +5552,23 @@ dependencies = [ "log", "ring", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ "aws-lc-rs", "log", "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] @@ -5588,12 +5587,12 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.1.3", "rustls-pki-types", "schannel", "security-framework", @@ -5610,9 +5609,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -5636,9 +5635,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ "aws-lc-rs", "ring", @@ -5665,12 +5664,11 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5174a470eeb535a721ae9fdd6e291c2411a906b96592182d05217591d5c5cf7b" +checksum = "5022b253619b1ba797f243056276bed8ed1a73b0f5a7ce7225d524067644bf8f" dependencies = [ "byteorder", - "derive_more", "twox-hash", ] @@ -5728,7 +5726,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -5754,7 +5752,7 @@ checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -5793,11 +5791,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -5806,9 +5804,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -5841,9 +5839,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] @@ -5872,13 +5870,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -5889,16 +5887,17 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -5921,14 +5920,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -5947,15 +5946,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.3.0", "serde", "serde_derive", "serde_json", @@ -5968,7 +5967,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "itoa", "ryu", "serde", @@ -6134,12 +6133,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -6177,11 +6170,30 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", +] + [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "supports-color" @@ -6217,9 +6229,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -6258,7 +6270,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6311,12 +6323,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", "windows-sys 0.52.0", ] @@ -6408,7 +6421,7 @@ dependencies = [ "futures", "futures-util", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-util", "k8s-openapi", "kube", @@ -6418,7 +6431,7 @@ dependencies = [ "regex", "reqwest 0.12.5", "rstest", - "rustls 0.23.10", + "rustls 0.23.12", "serde", "serde_json", "tempfile", @@ -6441,22 +6454,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6511,9 +6524,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -6526,21 +6539,20 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.1", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -6555,13 +6567,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6591,16 +6603,16 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "tokio", ] [[package]] name = "tokio-socks" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", @@ -6669,21 +6681,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.14", + "toml_edit 0.22.20", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] @@ -6694,22 +6706,22 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.14" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.13", + "winnow 0.6.18", ] [[package]] @@ -6726,7 +6738,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-timeout 0.4.1", "percent-encoding", "pin-project", @@ -6749,7 +6761,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6779,10 +6791,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "base64 0.21.7", - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", "mime", "pin-project-lite", @@ -6835,7 +6847,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6910,7 +6922,7 @@ dependencies = [ "log", "rand", "rustls 0.22.4", - "rustls-native-certs 0.7.0", + "rustls-native-certs 0.7.1", "rustls-pki-types", "sha1", "thiserror", @@ -7130,9 +7142,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom", ] @@ -7145,9 +7157,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "virtue" @@ -7213,7 +7225,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "wasm-bindgen-shared", ] @@ -7247,7 +7259,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7297,9 +7309,9 @@ dependencies = [ [[package]] name = "which" -version = "6.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" +checksum = "3d9c5ed668ee1f17edb3b627225343d210006a90bb1e3745ce1f30b1fb115075" dependencies = [ "either", "home", @@ -7348,11 +7360,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7367,7 +7379,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -7385,7 +7397,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -7405,18 +7426,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -7427,9 +7448,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -7439,9 +7460,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -7451,15 +7472,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -7469,9 +7490,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -7481,9 +7502,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -7493,9 +7514,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -7505,9 +7526,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -7520,9 +7541,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] @@ -7603,7 +7624,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" dependencies = [ - "asn1-rs 0.6.1", + "asn1-rs 0.6.2", "data-encoding", "der-parser", "lazy_static", @@ -7666,22 +7687,23 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -7701,7 +7723,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -7729,27 +7751,27 @@ dependencies = [ [[package]] name = "zstd" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "7.1.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/changelog.d/2624.fixed.md b/changelog.d/2624.fixed.md new file mode 100644 index 00000000000..9450eac1da3 --- /dev/null +++ b/changelog.d/2624.fixed.md @@ -0,0 +1 @@ +Fix execve, make hooks on Linux enabled by default (fix data race on process initialization, might fix more stuff) \ No newline at end of file diff --git a/mirrord/config/src/experimental.rs b/mirrord/config/src/experimental.rs index cabac97105a..9d721fbda6c 100644 --- a/mirrord/config/src/experimental.rs +++ b/mirrord/config/src/experimental.rs @@ -33,7 +33,7 @@ pub struct ExperimentalConfig { /// Enables exec hooks on Linux. Enable Linux hooks can fix issues when the application /// shares sockets with child commands (e.g Python web servers with reload), /// but the feature is not stable and may cause other issues. - #[config(default = false)] + #[config(default = true)] pub enable_exec_hooks_linux: bool, } diff --git a/mirrord/layer/Cargo.toml b/mirrord/layer/Cargo.toml index c54de1a468f..7cdaf6ae8cb 100644 --- a/mirrord/layer/Cargo.toml +++ b/mirrord/layer/Cargo.toml @@ -53,7 +53,6 @@ itertools = "0.13" os_info = "3" bytemuck = "1" bimap.workspace = true -dashmap = "5.4" hashbrown = "0.14" exec.workspace = true syscalls = { version = "0.6", features = ["full"] } diff --git a/mirrord/layer/src/common.rs b/mirrord/layer/src/common.rs index fe7af8825db..92b654dcff7 100644 --- a/mirrord/layer/src/common.rs +++ b/mirrord/layer/src/common.rs @@ -12,6 +12,7 @@ use crate::{ error::{HookError, HookResult}, exec_hooks::Argv, file::OpenOptionsInternalExt, + socket::SHARED_SOCKETS_ENV_VAR, PROXY_CONNECTION, }; @@ -118,8 +119,9 @@ impl CheckedInto for *const c_char { } } -// **Warning**: The implementation here expects that `*const *const c_char` be a valid, -// null-terminated list! We're using `Nul::new_unchecked`, which doesn't check for this. +/// **Warning**: The implementation here expects that `*const *const c_char` be a valid, +/// null-terminated list! We're using `Nul::new_unchecked`, which doesn't check for this. +/// NOTE: It also strips shared sockets to avoid it being double set. impl CheckedInto for *const *const c_char { fn checked_into(self) -> Detour { let c_list = self @@ -132,6 +134,7 @@ impl CheckedInto for *const *const c_char { // Remove the last `null` pointer. .filter(|value| !value.is_null()) .map(|value| unsafe { CStr::from_ptr(*value) }.to_owned()) + .filter(|value| !value.to_string_lossy().starts_with(SHARED_SOCKETS_ENV_VAR)) .collect::(); Detour::Success(list) diff --git a/mirrord/layer/src/exec_hooks/hooks.rs b/mirrord/layer/src/exec_hooks/hooks.rs index 3fee991a9e8..a3b5653975f 100644 --- a/mirrord/layer/src/exec_hooks/hooks.rs +++ b/mirrord/layer/src/exec_hooks/hooks.rs @@ -8,6 +8,8 @@ use mirrord_layer_macro::hook_fn; use mirrord_layer_macro::hook_guard_fn; use super::*; +#[cfg(not(target_os = "macos"))] +use crate::common::CheckedInto; #[cfg(target_os = "macos")] use crate::exec_utils::*; use crate::{ @@ -20,11 +22,14 @@ use crate::{ /// Converts the [`SOCKETS`] map into a vector of pairs `(Fd, UserSocket)`, so we can rebuild /// it as a map. -fn shared_sockets() -> Vec<(i32, UserSocket)> { - SOCKETS - .iter() - .map(|inner| (*inner.key(), UserSocket::clone(inner.value()))) - .collect::>() +fn shared_sockets() -> Detour> { + Detour::Success( + SOCKETS + .lock()? + .iter() + .map(|(key, value)| (*key, value.as_ref().clone())) + .collect::>(), + ) } /// Takes an [`Argv`] with the enviroment variables from an `exec` call, extending it with @@ -38,7 +43,7 @@ pub(crate) fn prepare_execve_envp(env_vars: Detour) -> Detour { other => Detour::Bypass(other), })?; - let encoded = bincode::encode_to_vec(shared_sockets(), bincode::config::standard()) + let encoded = bincode::encode_to_vec(shared_sockets()?, bincode::config::standard()) .map(|bytes| BASE64_URL_SAFE.encode(bytes))?; env_vars.push(CString::new(format!("{SHARED_SOCKETS_ENV_VAR}={encoded}"))?); @@ -62,16 +67,12 @@ unsafe fn environ() -> *const *const c_char { #[cfg(not(target_os = "macos"))] #[hook_fn] unsafe extern "C" fn execv_detour(path: *const c_char, argv: *const *const c_char) -> c_int { - let encoded = bincode::encode_to_vec(shared_sockets(), bincode::config::standard()) - .map(|bytes| BASE64_URL_SAFE.encode(bytes)) - .unwrap_or_default(); - - // `encoded` is emtpy if the encoding failed, so we don't set the env var. - if !encoded.is_empty() { - std::env::set_var(SHARED_SOCKETS_ENV_VAR, encoded); + let envp = environ(); + if let Detour::Success(envp) = prepare_execve_envp(envp.checked_into()) { + FN_EXECVE(path, argv, envp.leak()) + } else { + FN_EXECVE(path, argv, envp) } - - FN_EXECVE(path, argv, environ()) } /// Hook for `libc::execve`. @@ -84,11 +85,6 @@ pub(crate) unsafe extern "C" fn execve_detour( argv: *const *const c_char, envp: *const *const c_char, ) -> c_int { - use crate::{common::CheckedInto, detour::DetourGuard}; - - let _guard = DetourGuard::new(); - - // Hopefully `envp` is a properly null-terminated list. if let Detour::Success(envp) = prepare_execve_envp(envp.checked_into()) { FN_EXECVE(path, argv, envp.leak()) } else { diff --git a/mirrord/layer/src/file.rs b/mirrord/layer/src/file.rs index 14b8181f32c..543ef5f903b 100644 --- a/mirrord/layer/src/file.rs +++ b/mirrord/layer/src/file.rs @@ -1,9 +1,9 @@ use std::{ + collections::HashMap, os::unix::io::RawFd, - sync::{Arc, LazyLock}, + sync::{Arc, LazyLock, Mutex}, }; -use dashmap::DashMap; use libc::{c_int, O_ACCMODE, O_APPEND, O_CREAT, O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY}; use mirrord_protocol::file::{ AccessFileRequest, CloseFileRequest, FdOpenDirRequest, OpenDirResponse, OpenOptionsInternal, @@ -36,8 +36,8 @@ type DirStreamFd = usize; /// We use Arc so we can support dup more nicely, this means that if user /// Opens file `A`, receives fd 1, then dups, receives 2 - both stay open, until both are closed. /// Previously in such scenario we would close the remote, causing issues. -pub(crate) static OPEN_FILES: LazyLock>> = - LazyLock::new(|| DashMap::with_capacity(4)); +pub(crate) static OPEN_FILES: LazyLock>>> = + LazyLock::new(|| Mutex::new(HashMap::new())); /// Extension trait for [`OpenOptionsInternal`], used to convert between `libc`-ish open options and /// Rust's [`std::fs::OpenOptions`] diff --git a/mirrord/layer/src/file/open_dirs.rs b/mirrord/layer/src/file/open_dirs.rs index fd08438c90b..2e799c9825c 100644 --- a/mirrord/layer/src/file/open_dirs.rs +++ b/mirrord/layer/src/file/open_dirs.rs @@ -2,11 +2,11 @@ //! `readdir` family. use std::{ + collections::HashMap, ffi::CString, sync::{Arc, LazyLock, Mutex}, }; -use dashmap::DashMap; use mirrord_protocol::file::{CloseDirRequest, DirEntryInternal, ReadDirRequest, ReadDirResponse}; use super::{DirStreamFd, LocalFd, RemoteFd, OPEN_FILES}; @@ -21,14 +21,14 @@ pub static OPEN_DIRS: LazyLock = LazyLock::new(OpenDirs::new); /// State related to open remote directories. pub struct OpenDirs { - inner: DashMap>>, + inner: Mutex>>>, } impl OpenDirs { /// Creates an empty state. fn new() -> Self { Self { - inner: DashMap::with_capacity(4), + inner: Mutex::new(HashMap::new()), } } @@ -38,17 +38,24 @@ impl OpenDirs { /// /// * `local_dir_fd` - opaque identifier /// * `remote_fd` - descriptor of the remote directory (received from the agent) - pub fn insert(&self, local_dir_fd: DirStreamFd, remote_fd: RemoteFd, base_fd: LocalFd) { - self.inner.insert( + pub fn insert( + &self, + local_dir_fd: DirStreamFd, + remote_fd: RemoteFd, + base_fd: LocalFd, + ) -> Detour<()> { + self.inner.lock()?.insert( local_dir_fd, Mutex::new(OpenDir::new(local_dir_fd, remote_fd, base_fd)).into(), ); + Detour::Success(()) } /// Reads next entry from the open directory with the given [`DirStreamFd`]. pub fn read_r(&self, local_dir_fd: DirStreamFd) -> Detour> { let dir = self .inner + .lock()? .get(&local_dir_fd) .ok_or(Bypass::LocalDirStreamNotFound(local_dir_fd))? .clone(); @@ -62,6 +69,7 @@ impl OpenDirs { pub fn get_fd(&self, local_dir_fd: DirStreamFd) -> Detour { let dir = self .inner + .lock()? .get(&local_dir_fd) .ok_or(Bypass::LocalDirStreamNotFound(local_dir_fd))? .clone(); @@ -86,6 +94,7 @@ impl OpenDirs { pub fn read(&self, local_dir_fd: DirStreamFd) -> Detour<*const libc::dirent> { let dir = self .inner + .lock()? .get(&local_dir_fd) .ok_or(Bypass::LocalDirStreamNotFound(local_dir_fd))? .clone(); @@ -117,6 +126,7 @@ impl OpenDirs { pub fn read64(&self, local_dir_fd: DirStreamFd) -> Detour<*const libc::dirent64> { let dir = self .inner + .lock()? .get(&local_dir_fd) .ok_or(Bypass::LocalDirStreamNotFound(local_dir_fd))? .clone(); @@ -134,14 +144,15 @@ impl OpenDirs { /// Closes the open directory with the given [`DirStreamFd`]. pub fn close(&self, local_dir_fd: DirStreamFd) -> Detour { - let (_, dir) = self + let dir = self .inner + .lock()? .remove(&local_dir_fd) .ok_or(Bypass::LocalDirStreamNotFound(local_dir_fd))?; let mut guard = dir.lock().expect("lock poisoned"); guard.closed = true; - OPEN_FILES.remove(&guard.base_fd); + OPEN_FILES.lock()?.remove(&guard.base_fd); common::make_proxy_request_no_response(CloseDirRequest { remote_fd: guard.remote_fd, })?; diff --git a/mirrord/layer/src/file/ops.rs b/mirrord/layer/src/file/ops.rs index f4e5f1e43e0..dc69fc253e9 100644 --- a/mirrord/layer/src/file/ops.rs +++ b/mirrord/layer/src/file/ops.rs @@ -127,6 +127,7 @@ fn get_remote_fd(local_fd: RawFd) -> Detour { // don't add a trace here since it causes deadlocks in some cases. Detour::Success( OPEN_FILES + .lock()? .get(&local_fd) .map(|remote_file| remote_file.fd) // Bypass if we're not managing the relative part. @@ -188,7 +189,7 @@ pub(crate) fn open(path: Detour, open_options: OpenOptionsInternal) -> // the fd to a string. let local_file_fd = create_local_fake_file(remote_fd)?; - OPEN_FILES.insert( + OPEN_FILES.lock()?.insert( local_file_fd, Arc::new(RemoteFile::new(remote_fd, path.display().to_string())), ); @@ -202,7 +203,11 @@ pub(crate) fn fdopendir(fd: RawFd) -> Detour { // usize == ptr size // we don't return a pointer to an address that contains DIR - let remote_file_fd = OPEN_FILES.get(&fd).ok_or(Bypass::LocalFdNotFound(fd))?.fd; + let remote_file_fd = OPEN_FILES + .lock()? + .get(&fd) + .ok_or(Bypass::LocalFdNotFound(fd))? + .fd; let open_dir_request = FdOpenDirRequest { remote_fd: remote_file_fd, @@ -212,7 +217,7 @@ pub(crate) fn fdopendir(fd: RawFd) -> Detour { common::make_proxy_request_with_response(open_dir_request)??; let local_dir_fd = create_local_fake_file(remote_dir_fd)?; - OPEN_DIRS.insert(local_dir_fd as usize, remote_dir_fd, fd); + OPEN_DIRS.insert(local_dir_fd as usize, remote_dir_fd, fd)?; // Let it stay in OPEN_FILES, as some functions might use it in comibination with dirfd @@ -248,7 +253,7 @@ pub(crate) fn openat( let local_file_fd = create_local_fake_file(remote_fd)?; - OPEN_FILES.insert( + OPEN_FILES.lock()?.insert( local_file_fd, Arc::new(RemoteFile::new(remote_fd, path.display().to_string())), ); diff --git a/mirrord/layer/src/lib.rs b/mirrord/layer/src/lib.rs index 8d2cb781320..13163e9837b 100644 --- a/mirrord/layer/src/lib.rs +++ b/mirrord/layer/src/lib.rs @@ -573,12 +573,15 @@ fn enable_hooks(state: &LayerSetup) { #[mirrord_layer_macro::instrument(level = "trace", fields(pid = std::process::id()))] pub(crate) fn close_layer_fd(fd: c_int) { // Remove from sockets. - if let Some((_, socket)) = SOCKETS.remove(&fd) { + if let Some(socket) = SOCKETS.lock().expect("SOCKETS lock failed").remove(&fd) { // Closed file is a socket, so if it's already bound to a port - notify agent to stop // mirroring/stealing that port. socket.close(); } else if setup().fs_config().is_active() { - OPEN_FILES.remove(&fd); + OPEN_FILES + .lock() + .expect("OPEN_FILES lock failed") + .remove(&fd); } } diff --git a/mirrord/layer/src/socket.rs b/mirrord/layer/src/socket.rs index 90f89ce8d08..274b4f95054 100644 --- a/mirrord/layer/src/socket.rs +++ b/mirrord/layer/src/socket.rs @@ -1,15 +1,15 @@ //! We implement each hook function in a safe function as much as possible, having the unsafe do the //! absolute minimum use std::{ + collections::HashMap, net::{SocketAddr, ToSocketAddrs}, os::unix::io::RawFd, str::FromStr, - sync::{Arc, LazyLock}, + sync::{Arc, LazyLock, Mutex}, }; use base64::prelude::*; use bincode::{Decode, Encode}; -use dashmap::DashMap; use hashbrown::hash_set::HashSet; use hooks::FN_FCNTL; use libc::{c_int, sockaddr, socklen_t}; @@ -53,7 +53,7 @@ pub(crate) const SHARED_SOCKETS_ENV_VAR: &str = "MIRRORD_SHARED_SOCKETS"; /// - [`libc::FD_CLOEXEC`] behaviour: While rebuilding sockets from the env var, we also /// check if they're set with the cloexec flag, so that children processes don't end up using /// sockets that are exclusive for their parents. -pub(crate) static SOCKETS: LazyLock>> = LazyLock::new(|| { +pub(crate) static SOCKETS: LazyLock>>> = LazyLock::new(|| { std::env::var(SHARED_SOCKETS_ENV_VAR) .ok() .and_then(|encoded| BASE64_URL_SAFE.decode(encoded.into_bytes()).ok()) @@ -65,14 +65,16 @@ pub(crate) static SOCKETS: LazyLock>> = LazyLock: .ok() }) .map(|(fds_and_sockets, _)| { - DashMap::from_iter(fds_and_sockets.into_iter().filter_map(|(fd, socket)| { - // Do not inherit sockets that are `FD_CLOEXEC`. - if unsafe { FN_FCNTL(fd, libc::F_GETFD, 0) != -1 } { - Some((fd, Arc::new(socket))) - } else { - None - } - })) + Mutex::new(HashMap::from_iter(fds_and_sockets.into_iter().filter_map( + |(fd, socket)| { + // Do not inherit sockets that are `FD_CLOEXEC`. + if unsafe { FN_FCNTL(fd, libc::F_GETFD, 0) != -1 } { + Some((fd, Arc::new(socket))) + } else { + None + } + }, + ))) }) .unwrap_or_default() }); @@ -372,8 +374,9 @@ impl OutgoingSelector { } let cached = REMOTE_DNS_REVERSE_MAPPING + .lock()? .get(&address.ip()) - .map(|entry| entry.value().clone()); + .cloned(); let Some(hostname) = cached else { return Ok(address); }; diff --git a/mirrord/layer/src/socket/hooks.rs b/mirrord/layer/src/socket/hooks.rs index 7f8cb91af44..aba66de8800 100644 --- a/mirrord/layer/src/socket/hooks.rs +++ b/mirrord/layer/src/socket/hooks.rs @@ -1,8 +1,11 @@ use alloc::ffi::CString; use core::{cmp, ffi::CStr}; -use std::{os::unix::io::RawFd, sync::LazyLock}; +use std::{ + collections::HashSet, + os::unix::io::RawFd, + sync::{LazyLock, Mutex}, +}; -use dashmap::DashSet; use errno::{set_errno, Errno}; use libc::{c_char, c_int, c_void, hostent, size_t, sockaddr, socklen_t, ssize_t, EINVAL}; use mirrord_layer_macro::{hook_fn, hook_guard_fn}; @@ -12,7 +15,8 @@ use crate::{detour::DetourGuard, hooks::HookManager, replace}; /// Here we keep addr infos that we allocated so we'll know when to use the original /// freeaddrinfo function and when to use our implementation -pub(crate) static MANAGED_ADDRINFO: LazyLock> = LazyLock::new(DashSet::new); +pub(crate) static MANAGED_ADDRINFO: LazyLock>> = + LazyLock::new(|| Mutex::new(HashSet::new())); #[hook_guard_fn] pub(crate) unsafe extern "C" fn socket_detour( @@ -267,7 +271,10 @@ unsafe extern "C" fn getaddrinfo_detour( getaddrinfo(rawish_node, rawish_service, rawish_hints) .map(|c_addr_info_ptr| { out_addr_info.copy_from_nonoverlapping(&c_addr_info_ptr, 1); - MANAGED_ADDRINFO.insert(c_addr_info_ptr as usize); + MANAGED_ADDRINFO + .lock() + .expect("MANAGED_ADDRINFO lock failed") + .insert(c_addr_info_ptr as usize); 0 }) .unwrap_or_bypass_with(|_| FN_GETADDRINFO(raw_node, raw_service, raw_hints, out_addr_info)) @@ -295,29 +302,27 @@ unsafe extern "C" fn getaddrinfo_detour( /// This can be solved probably by adding each pointer in the linked list to our HashSet. #[hook_guard_fn] unsafe extern "C" fn freeaddrinfo_detour(addrinfo: *mut libc::addrinfo) { - MANAGED_ADDRINFO - .remove(&(addrinfo as usize)) - .map(|_| { - // Iterate over `addrinfo` linked list dropping it. - let mut current = addrinfo; - while !current.is_null() { - let current_box = Box::from_raw(current); - let ai_addr = Box::from_raw(current_box.ai_addr); - let ai_canonname = CString::from_raw(current_box.ai_canonname); - - current = (*current).ai_next; - - drop(ai_addr); - drop(ai_canonname); - drop(current_box); - MANAGED_ADDRINFO.remove(&(current as usize)); - } - }) - .unwrap_or_else(|| { - // If the `addrinfo` pointer was not allocated by `getaddrinfo_detour`, then it - // is bypassed. - FN_FREEADDRINFO(addrinfo); - }) + let mut managed_addr_info = MANAGED_ADDRINFO + .lock() + .expect("MANAGED_ADDRINFO lock failed"); + if managed_addr_info.remove(&(addrinfo as usize)) { + // Iterate over `addrinfo` linked list dropping it. + let mut current = addrinfo; + while !current.is_null() { + let current_box = Box::from_raw(current); + let ai_addr = Box::from_raw(current_box.ai_addr); + let ai_canonname = CString::from_raw(current_box.ai_canonname); + + current = (*current).ai_next; + + drop(ai_addr); + drop(ai_canonname); + drop(current_box); + managed_addr_info.remove(&(current as usize)); + } + } else { + FN_FREEADDRINFO(addrinfo); + } } /// Not a faithful reproduction of what [`libc::recvmsg`] is supposed to do, see [`recv_from`]. diff --git a/mirrord/layer/src/socket/ops.rs b/mirrord/layer/src/socket/ops.rs index f5fea02235a..4f97d76e279 100644 --- a/mirrord/layer/src/socket/ops.rs +++ b/mirrord/layer/src/socket/ops.rs @@ -1,6 +1,7 @@ use alloc::ffi::CString; use core::{ffi::CStr, mem}; use std::{ + collections::HashMap, io, net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, TcpStream}, os::{ @@ -9,7 +10,7 @@ use std::{ }, path::PathBuf, ptr, - sync::{Arc, OnceLock}, + sync::{Arc, Mutex, OnceLock}, }; use errno::set_errno; @@ -39,8 +40,8 @@ use crate::{ /// /// Used by [`connect_outgoing`] to retrieve the hostname from the address that the user called /// [`connect`] with, so we can resolve it locally when neccessary. -pub(super) static REMOTE_DNS_REVERSE_MAPPING: LazyLock> = - LazyLock::new(|| DashMap::with_capacity(8)); +pub(super) static REMOTE_DNS_REVERSE_MAPPING: LazyLock>> = + LazyLock::new(|| Mutex::new(HashMap::new())); /// Hostname initialized from the agent with [`gethostname`]. pub(crate) static HOSTNAME: OnceLock = OnceLock::new(); @@ -138,7 +139,7 @@ pub(super) fn socket(domain: c_int, type_: c_int, protocol: c_int) -> Detour false, - SocketState::Bound(bound) | SocketState::Listening(bound) => { - bound.requested_address == requested_address - } - }) { + if SOCKETS + .lock()? + .iter() + .any(|(_, socket)| match &socket.state { + SocketState::Initialized | SocketState::Connected(_) => false, + SocketState::Bound(bound) | SocketState::Listening(bound) => { + bound.requested_address == requested_address + } + }) + { Err(HookError::AddressAlreadyBound(requested_address))?; } @@ -327,7 +333,7 @@ pub(super) fn bind( address, }); - SOCKETS.insert(sockfd, socket); + SOCKETS.lock()?.insert(sockfd, socket); // node reads errno to check if bind was successful and doesn't care about the return value // (???) @@ -341,8 +347,8 @@ pub(super) fn bind( pub(super) fn listen(sockfd: RawFd, backlog: c_int) -> Detour { let mut socket = { SOCKETS + .lock()? .remove(&sockfd) - .map(|(_, socket)| socket) .bypass(Bypass::LocalFdNotFound(sockfd))? }; @@ -395,7 +401,7 @@ pub(super) fn listen(sockfd: RawFd, backlog: c_int) -> Detour { address, }); - SOCKETS.insert(sockfd, socket); + SOCKETS.lock()?.insert(sockfd, socket); Detour::Success(listen_result) } @@ -461,7 +467,7 @@ fn connect_outgoing( trace!("we are connected {connected:#?}"); Arc::get_mut(&mut user_socket_info).unwrap().state = SocketState::Connected(connected); - SOCKETS.insert(sockfd, user_socket_info); + SOCKETS.lock()?.insert(sockfd, user_socket_info); Detour::Success(connect_result) }; @@ -509,8 +515,9 @@ fn connect_to_local_address( } else { Detour::Success( SOCKETS + .lock()? .iter() - .find_map(|socket| match socket.state { + .find_map(|(_, socket)| match socket.state { SocketState::Listening(Bound { requested_address, address, @@ -560,8 +567,8 @@ pub(super) fn connect( trace!("in connect {:#?}", SOCKETS); - let user_socket_info = match SOCKETS.remove(&sockfd) { - Some((_, socket)) => socket, + let user_socket_info = match SOCKETS.lock()?.remove(&sockfd) { + Some(socket) => socket, None => { // Socket was probably removed from `SOCKETS` in `bind` detour (as not interesting in // terms of `incoming` feature). @@ -668,9 +675,10 @@ pub(super) fn getpeername( ) -> Detour { let remote_address = { SOCKETS + .lock()? .get(&sockfd) .bypass(Bypass::LocalFdNotFound(sockfd)) - .and_then(|entry| match &entry.value().state { + .and_then(|socket| match &socket.state { SocketState::Connected(connected) => { Detour::Success(connected.remote_address.clone()) } @@ -697,9 +705,10 @@ pub(super) fn getsockname( ) -> Detour { let local_address = { SOCKETS + .lock()? .get(&sockfd) .bypass(Bypass::LocalFdNotFound(sockfd)) - .and_then(|entry| match &entry.value().state { + .and_then(|socket| match &socket.state { SocketState::Connected(connected) => { Detour::Success(connected.local_address.clone()) } @@ -736,6 +745,7 @@ pub(super) fn accept( ) -> Detour { let (domain, protocol, type_, port, listener_address) = { SOCKETS + .lock()? .get(&sockfd) .bypass(Bypass::LocalFdNotFound(sockfd)) .and_then(|socket| match &socket.state { @@ -778,7 +788,7 @@ pub(super) fn accept( fill_address(address, address_len, remote_source.into())?; - SOCKETS.insert(new_fd, Arc::new(new_socket)); + SOCKETS.lock()?.insert(new_fd, Arc::new(new_socket)); Detour::Success(new_fd) } @@ -802,21 +812,24 @@ pub(super) fn fcntl(orig_fd: c_int, cmd: c_int, fcntl_fd: i32) -> Result<(), Hoo /// Extra relevant for node on macos. #[mirrord_layer_macro::instrument(level = "trace", ret)] pub(super) fn dup(fd: c_int, dup_fd: i32) -> Result<(), HookError> { - if let Some(socket) = SOCKETS.get(&fd).map(|entry| entry.value().clone()) { - SOCKETS.insert(dup_fd as RawFd, socket); + let mut sockets = SOCKETS.lock()?; + if let Some(socket) = sockets.get(&fd).cloned() { + sockets.insert(dup_fd as RawFd, socket); if SWITCH_MAP { - OPEN_FILES.remove(&dup_fd); + OPEN_FILES.lock()?.remove(&dup_fd); } return Ok(()); } - if let Some(file) = OPEN_FILES.view(&fd, |_, file| file.clone()) { - OPEN_FILES.insert(dup_fd as RawFd, file); + let mut open_files = OPEN_FILES.lock()?; + if let Some(file) = open_files.get(&fd) { + let cloned_file = file.clone(); + open_files.insert(dup_fd as RawFd, cloned_file); if SWITCH_MAP { - SOCKETS.remove(&dup_fd); + sockets.remove(&dup_fd); } } @@ -833,8 +846,9 @@ pub(super) fn dup(fd: c_int, dup_fd: i32) -> Result<(), pub(super) fn remote_getaddrinfo(node: String) -> HookResult> { let addr_info_list = common::make_proxy_request_with_response(GetAddrInfoRequest { node })?.0?; + let mut remote_dns_reverse_mapping = REMOTE_DNS_REVERSE_MAPPING.lock()?; addr_info_list.iter().for_each(|lookup| { - REMOTE_DNS_REVERSE_MAPPING.insert(lookup.ip, lookup.name.clone()); + remote_dns_reverse_mapping.insert(lookup.ip, lookup.name.clone()); }); Ok(addr_info_list @@ -910,6 +924,7 @@ pub(super) fn getaddrinfo( remote_getaddrinfo(node.clone())? }; + let mut managed_addr_info = MANAGED_ADDRINFO.lock()?; // Only care about: `ai_family`, `ai_socktype`, `ai_protocol`. let result = resolved_addr .into_iter() @@ -938,7 +953,7 @@ pub(super) fn getaddrinfo( .map(Box::new) .map(Box::into_raw) .map(|raw| { - MANAGED_ADDRINFO.insert(raw as usize); + managed_addr_info.insert(raw as usize); raw }) .reduce(|current, previous| { @@ -1109,6 +1124,7 @@ pub(super) fn recv_from( source_length: *mut socklen_t, ) -> Detour { SOCKETS + .lock()? .get(&sockfd) .and_then(|socket| match &socket.state { SocketState::Connected(Connected { remote_address, .. }) => { @@ -1130,16 +1146,17 @@ fn send_dns_patch( user_socket_info: Arc, destination: SocketAddr, ) -> Detour { + let mut sockets = SOCKETS.lock()?; // We want to keep holding this socket. - SOCKETS.insert(sockfd, user_socket_info); + sockets.insert(sockfd, user_socket_info); // Sending a packet on port NOT 53. - let destination = SOCKETS + let destination = sockets .iter() - .filter(|socket| socket.kind.is_udp()) + .filter(|(_, socket)| socket.kind.is_udp()) // Is the `destination` one of our sockets? If so, then we grab the actual address, // instead of the, possibly fake address from mirrord. - .find_map(|receiver_socket| match &receiver_socket.state { + .find_map(|(_, receiver_socket)| match &receiver_socket.state { SocketState::Bound(Bound { requested_address, address, @@ -1210,7 +1227,8 @@ pub(super) fn send_to( let destination = SockAddr::try_from_raw(raw_destination, destination_length)?; trace!("destination {:?}", destination.as_socket()); - let (_, user_socket_info) = SOCKETS + let user_socket_info = SOCKETS + .lock()? .remove(&sockfd) .ok_or(Bypass::LocalFdNotFound(sockfd))?; @@ -1254,6 +1272,7 @@ pub(super) fn send_to( )?; let layer_address: SockAddr = SOCKETS + .lock()? .get(&sockfd) .and_then(|socket| match &socket.state { SocketState::Connected(connected) => connected.layer_address.clone(), @@ -1296,7 +1315,9 @@ pub(super) fn sendmsg( trace!("destination {:?}", destination.as_socket()); - let (_, user_socket_info) = SOCKETS + // send_dns_patch acquires lock, so don't hold it + let user_socket_info = SOCKETS + .lock()? .remove(&sockfd) .ok_or(Bypass::LocalFdNotFound(sockfd))?; @@ -1344,6 +1365,7 @@ pub(super) fn sendmsg( )?; let layer_address: SockAddr = SOCKETS + .lock()? .get(&sockfd) .and_then(|socket| match &socket.state { SocketState::Connected(connected) => connected.layer_address.clone(),