From 22b67958583610137a75cadb56cf6eda5c272932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Doru=20Bl=C3=A2nzeanu?= Date: Thu, 14 Nov 2024 12:38:54 +0200 Subject: [PATCH 01/17] Improve docs (#56) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improve docs Signed-off-by: Doru Blânzeanu * Fix guest docs API reference Signed-off-by: Doru Blânzeanu --------- Signed-off-by: Doru Blânzeanu --- README.md | 6 +++--- docs/README.md | 2 +- docs/how-to-use-flatbuffers.md | 4 ++-- docs/security.md | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 73ff1c9d..1552ee0b 100644 --- a/README.md +++ b/README.md @@ -153,11 +153,11 @@ For examples of guest applications, see the [./src/tests/c_guests](./src/tests/c - [src/hyperlight_common](./src/hyperlight_common) - Test Guest Applications: - - [src/tests/rust_guests](./src/tests/rust_guests) - This directory contains two Hyperlight Guest programs written in Rust, which are intended to be launched within partitions as "guests". + - [src/tests/rust_guests](./src/tests/rust_guests) - This directory contains three Hyperlight Guest programs written in Rust, which are intended to be launched within partitions as "guests". - [src/tests/c_guests](./src/tests/c_guests) - This directory contains two Hyperlight Guest programs written in C, which are intended to be launched within partitions as "guests". - Tests: - - [src/hyperlight-testing](./src/hyperlight_testing) - Shared testing code for Hyperlight projects build int Rust. + - [src/hyperlight-testing](./src/hyperlight_testing) - Shared testing code for Hyperlight projects built in Rust. ## Try it yourself! @@ -214,7 +214,7 @@ just rg # build the rust test guest binaries cargo run --example hello-world ``` -If all worked as expected, you should the following message in your console: +If all worked as expected, you should see the following message in your console: ```text Hello, World! I am executing inside of a VM :) diff --git a/docs/README.md b/docs/README.md index 90e079ff..c71c3990 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ By eliminating this overhead, Hyperlight can execute arbitrary code more efficie ## Basics: Hyperlight internals -Hyperlight achieves these efficiencies by removing all operating system functionality from inside the virtual machine, and instead requiring all guest binaries be run directly on the virtual CPU (vCPU). This key requirement means all Hyperlight guest binaries must not only be compiled to run on the vCPU's architecture, but also must be statically linked to specialized libraries to support their functionality (e.g. there are no syscalls whatsoever available). Roughly similar to Unikernel technologies, we provide a guest library (currently in C, but we have some preliminary plans to move to Rust for in-guest binary execution) to which guest binaries can be statically linked. +Hyperlight achieves these efficiencies by removing all operating system functionality from inside the virtual machine, and instead requiring all guest binaries be run directly on the virtual CPU (vCPU). This key requirement means all Hyperlight guest binaries must not only be compiled to run on the vCPU's architecture, but also must be statically linked to specialized libraries to support their functionality (e.g. there are no syscalls whatsoever available). Roughly similar to Unikernel technologies, we provide a guest library (in Rust, and a C compatible wrapper for it) to which guest binaries can be statically linked. Given a guest, then, Hyperlight takes some simple steps prior to executing it, including the following: diff --git a/docs/how-to-use-flatbuffers.md b/docs/how-to-use-flatbuffers.md index 0654de2f..99ab7049 100644 --- a/docs/how-to-use-flatbuffers.md +++ b/docs/how-to-use-flatbuffers.md @@ -1,8 +1,8 @@ # How to use FlatBuffers -Flatbuffers is used to serialise and deserialize some data structures. +Flatbuffers is used to serialize and deserialize some data structures. -Schema files are used to define the data structures and are used to generate the code to serialise and deserialize the data structures. +Schema files are used to define the data structures and are used to generate the code to serialize and deserialize the data structures. Those files are located in the [`schema`](../src/schema) directory. diff --git a/docs/security.md b/docs/security.md index a84b0d2a..bff64e44 100644 --- a/docs/security.md +++ b/docs/security.md @@ -8,7 +8,7 @@ Hyperlight assumes that guest binaries are untrusted, and are running arbitrary, ### Hypervisor Isolation -Hyperlight runs all guest code inside a Virtual Machine, Each VM only has access to a very specific, small (by default) pre-allocted memory buffer in the host's process, no dynamic memory alocations are allowed. As a result, any attempt by the guest to read or write to memory anywhere outside of that particular buffer is caught by the hypervisor. Similarly, the guest VM does not have any access to devices since non are provided by the hyperlight host library, therefore there is no file, network, etc. access available to guest code. +Hyperlight runs all guest code inside a Virtual Machine, Each VM only has access to a very specific, small (by default) pre-allocated memory buffer in the host's process, no dynamic memory allocations are allowed. As a result, any attempt by the guest to read or write to memory anywhere outside of that particular buffer is caught by the hypervisor. Similarly, the guest VM does not have any access to devices since non are provided by the hyperlight host library, therefore there is no file, network, etc. access available to guest code. ### Host-Guest Communication (Serialization and Deserialization) From 1f66dcae0e1dfd9e840b94172142ed9c6831a33e Mon Sep 17 00:00:00 2001 From: Tomasz Andrzejak Date: Thu, 14 Nov 2024 14:55:01 +0100 Subject: [PATCH 02/17] Run spell checks on the repo (#58) * Run spell checks on the repo Signed-off-by: Tomasz Andrzejak * Fix typo in `GuestPanicContext` Signed-off-by: Tomasz Andrzejak --------- Signed-off-by: Tomasz Andrzejak --- .github/workflows/ValidatePullRequest.yml | 7 +++++++ Justfile | 2 +- NOTICE.txt | 2 +- .../src/flatbuffer_wrappers/guest_log_level.rs | 2 +- src/hyperlight_host/benches/benchmarks.rs | 2 +- src/hyperlight_host/src/error.rs | 2 +- src/hyperlight_host/src/func/call_ctx.rs | 6 +++--- .../src/hypervisor/hypervisor_handler.rs | 2 +- src/hyperlight_host/src/hypervisor/kvm.rs | 4 ++-- src/hyperlight_host/src/hypervisor/metrics.rs | 4 ++-- .../src/hypervisor/surrogate_process_manager.rs | 6 +++--- src/hyperlight_host/src/mem/exe.rs | 2 +- src/hyperlight_host/src/mem/layout.rs | 6 +++--- src/hyperlight_host/src/mem/loaded_lib.rs | 2 +- src/hyperlight_host/src/mem/mgr.rs | 4 ++-- src/hyperlight_host/src/mem/mod.rs | 2 +- src/hyperlight_host/src/mem/pe/mod.rs | 2 +- src/hyperlight_host/src/mem/shared_mem.rs | 4 ++-- src/hyperlight_host/src/metrics/mod.rs | 10 +++++----- .../src/sandbox/initialized_multi_use.rs | 4 ++-- .../src/sandbox/initialized_single_use.rs | 2 +- src/hyperlight_host/src/sandbox/metrics.rs | 8 ++++---- src/hyperlight_host/src/sandbox/mod.rs | 2 +- src/hyperlight_host/src/sandbox/outb.rs | 2 +- src/hyperlight_host/src/sandbox/uninitialized.rs | 2 +- src/hyperlight_host/src/sandbox_state/mod.rs | 2 +- src/hyperlight_host/src/sandbox_state/sandbox.rs | 2 +- src/hyperlight_host/src/testing/log_values.rs | 2 +- src/hyperlight_host/tests/common/mod.rs | 2 +- src/schema/function_call.fbs | 2 +- src/schema/function_types.fbs | 2 +- typos.toml | 5 +++++ 32 files changed, 60 insertions(+), 48 deletions(-) create mode 100644 typos.toml diff --git a/.github/workflows/ValidatePullRequest.yml b/.github/workflows/ValidatePullRequest.yml index 539f3617..ce352a46 100644 --- a/.github/workflows/ValidatePullRequest.yml +++ b/.github/workflows/ValidatePullRequest.yml @@ -50,6 +50,13 @@ jobs: max_total_time: 300 # 5 minutes in seconds docs_only: ${{needs.docs-pr.outputs.docs-only}} secrets: inherit + spelling: + name: spell check with typos + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Spell Check Repo + uses: crate-ci/typos@master ##### # start build-on-windows diff --git a/Justfile b/Justfile index 0a93cc54..15544bdf 100644 --- a/Justfile +++ b/Justfile @@ -154,7 +154,7 @@ run-rust-examples target=default-target: (build-rust target) cargo run --profile={{ if target == "debug" { "dev" } else { target } }} --example metrics --features "function_call_metrics" {{ set-trace-env-vars }} cargo run --profile={{ if target == "debug" { "dev" } else { target } }} --example logging -# The two tracing eamples are flaky on windows so we run them on linux only for now, need to figure out why as they run fine locally on windows +# The two tracing examples are flaky on windows so we run them on linux only for now, need to figure out why as they run fine locally on windows run-rust-examples-linux target=default-target: (build-rust target) (run-rust-examples target) {{ set-trace-env-vars }} cargo run --profile={{ if target == "debug" { "dev" } else { target } }} --example tracing {{ set-trace-env-vars }} cargo run --profile={{ if target == "debug" { "dev" } else { target } }} --example tracing --features "function_call_metrics" diff --git a/NOTICE.txt b/NOTICE.txt index 2fb55a14..3f2d09d4 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -197,7 +197,7 @@ under the standard MIT terms. All other files which have no copyright comments are original works produced specifically for use as part of this library, written either by Rich Felker, the main author of the library, or by one or more -contibutors listed above. Details on authorship of individual files +contributors listed above. Details on authorship of individual files can be found in the git version control history of the project. The omission of copyright and license comments in each file is in the interest of source tree size. diff --git a/src/hyperlight_common/src/flatbuffer_wrappers/guest_log_level.rs b/src/hyperlight_common/src/flatbuffer_wrappers/guest_log_level.rs index 705a48d9..0add85f6 100644 --- a/src/hyperlight_common/src/flatbuffer_wrappers/guest_log_level.rs +++ b/src/hyperlight_common/src/flatbuffer_wrappers/guest_log_level.rs @@ -85,7 +85,7 @@ impl From<&LogLevel> for FbLogLevel { impl From<&LogLevel> for Level { // There is a test (sandbox::outb::tests::test_log_outb_log) which emits trace record as logs - // which causes a panic when this function is instrumeneted as the logger is contained in refcell and + // which causes a panic when this function is instrumented as the logger is contained in refcell and // instrumentation ends up causing a double mutborrow. So this is not instrumented. //TODO: instrument this once we fix the test fn from(val: &LogLevel) -> Level { diff --git a/src/hyperlight_host/benches/benchmarks.rs b/src/hyperlight_host/benches/benchmarks.rs index 6be6c213..6fcd6859 100644 --- a/src/hyperlight_host/benches/benchmarks.rs +++ b/src/hyperlight_host/benches/benchmarks.rs @@ -106,7 +106,7 @@ fn sandbox_benchmark(c: &mut Criterion) { // Benchmarks the time to create a new uninintialized sandbox. // Does **not** include the time to drop the sandbox. - group.bench_function("create_uninitalized_sandbox", |b| { + group.bench_function("create_uninitialized_sandbox", |b| { b.iter_with_large_drop(create_uninit_sandbox); }); diff --git a/src/hyperlight_host/src/error.rs b/src/hyperlight_host/src/error.rs index 702593d8..3c0a84d5 100644 --- a/src/hyperlight_host/src/error.rs +++ b/src/hyperlight_host/src/error.rs @@ -227,7 +227,7 @@ pub enum HyperlightError { #[error("Failed To Convert Parameter Value {0:?} to {1:?}")] ParameterValueConversionFailure(ParameterValue, &'static str), - /// a failure occured processing a PE file + /// a failure occurred processing a PE file #[error("Failure processing PE File {0:?}")] PEFileProcessingFailure(#[from] goblin::error::Error), diff --git a/src/hyperlight_host/src/func/call_ctx.rs b/src/hyperlight_host/src/func/call_ctx.rs index 6370f7b7..dc1253c3 100644 --- a/src/hyperlight_host/src/func/call_ctx.rs +++ b/src/hyperlight_host/src/func/call_ctx.rs @@ -56,7 +56,7 @@ impl MultiUseGuestCallContext { /// /// Every call to a guest function through this method will be made with the same "context" /// meaning that the guest state resulting from any previous call will be present/osbservable - /// by the guest funcation called. + /// by the guest function called. /// /// If you want to reset state, call `finish()` on this `MultiUseGuestCallContext` /// and get a new one from the resulting `MultiUseSandbox` @@ -89,9 +89,9 @@ impl MultiUseGuestCallContext { /// Note that this method is pub(crate) and does not reset the state of the /// sandbox. /// - /// It is intended to be used when evolving a MutliUseSandbox to a new state + /// It is intended to be used when evolving a MultiUseSandbox to a new state /// and is not intended to be called publicly. It allows the state of the guest to be altered - /// during the eveolution of one sandbox state to another, enabling the new state created + /// during the evolution of one sandbox state to another, enabling the new state created /// to be captured and stored in the Sandboxes state stack. /// pub(crate) fn finish_no_reset(self) -> MultiUseSandbox { diff --git a/src/hyperlight_host/src/hypervisor/hypervisor_handler.rs b/src/hyperlight_host/src/hypervisor/hypervisor_handler.rs index e880cef7..bfb55fa2 100644 --- a/src/hyperlight_host/src/hypervisor/hypervisor_handler.rs +++ b/src/hyperlight_host/src/hypervisor/hypervisor_handler.rs @@ -837,7 +837,7 @@ fn set_up_hypervisor_partition( // debug build without in-process feature log_then_return!("In-process mode requires `inprocess` cargo feature"); } else { - log_then_return!("In-process mode requires `inprocess` cargo feature and is only avaiable on debug-builds"); + log_then_return!("In-process mode requires `inprocess` cargo feature and is only available on debug-builds"); } } } else { diff --git a/src/hyperlight_host/src/hypervisor/kvm.rs b/src/hyperlight_host/src/hypervisor/kvm.rs index 338d97b1..5caf8241 100644 --- a/src/hyperlight_host/src/hypervisor/kvm.rs +++ b/src/hyperlight_host/src/hypervisor/kvm.rs @@ -103,7 +103,7 @@ impl KVMDriver { })?; let mut vcpu_fd = vm_fd.create_vcpu(0)?; - Self::setup_inital_sregs(&mut vcpu_fd, pml4_addr)?; + Self::setup_initial_sregs(&mut vcpu_fd, pml4_addr)?; let rsp_gp = GuestPtr::try_from(RawPtr::from(rsp))?; Ok(Self { @@ -117,7 +117,7 @@ impl KVMDriver { } #[instrument(err(Debug), skip_all, parent = Span::current(), level = "Trace")] - fn setup_inital_sregs(vcpu_fd: &mut VcpuFd, pml4_addr: u64) -> Result<()> { + fn setup_initial_sregs(vcpu_fd: &mut VcpuFd, pml4_addr: u64) -> Result<()> { // setup paging and IA-32e (64-bit) mode let mut sregs = vcpu_fd.get_sregs()?; sregs.cr3 = pml4_addr; diff --git a/src/hyperlight_host/src/hypervisor/metrics.rs b/src/hyperlight_host/src/hypervisor/metrics.rs index 0a98d658..499f3516 100644 --- a/src/hyperlight_host/src/hypervisor/metrics.rs +++ b/src/hyperlight_host/src/hypervisor/metrics.rs @@ -109,7 +109,7 @@ mod tests { /// Marking this test as ignored means that running `cargo test` will not /// run it. This will allow a developer who runs that command /// from their workstation to be successful without needing to know about - /// test interdependencies. This test will, however, be run explcitly as a + /// test interdependencies. This test will, however, be run explicitly as a /// part of the CI pipeline. fn test_metrics() { let iter: HypervisorMetricIter = HypervisorMetric::iter(); @@ -151,7 +151,7 @@ mod tests { /// Marking this test as ignored means that running `cargo test` will not /// run it. This will allow a developer who runs that command /// from their workstation to be successful without needing to know about - /// test interdependencies. This test will, however, be run explcitly as a + /// test interdependencies. This test will, however, be run explicitly as a /// part of the CI pipeline. fn test_gather_metrics() { lazy_static! { diff --git a/src/hyperlight_host/src/hypervisor/surrogate_process_manager.rs b/src/hyperlight_host/src/hypervisor/surrogate_process_manager.rs index 5e4287fe..ece7cc23 100644 --- a/src/hyperlight_host/src/hypervisor/surrogate_process_manager.rs +++ b/src/hyperlight_host/src/hypervisor/surrogate_process_manager.rs @@ -307,13 +307,13 @@ fn ensure_surrogate_process_exe() -> Result<()> { if p.exists() { // check to see if sha's match and if not delete the file so we'll extract // the embedded file below. - let embeded_file_sha = sha256::digest(exe.data.as_ref()); + let embedded_file_sha = sha256::digest(exe.data.as_ref()); let file_on_disk_sha = sha256::try_digest(&p)?; - if embeded_file_sha != file_on_disk_sha { + if embedded_file_sha != file_on_disk_sha { println!( "sha of embedded surrorate '{}' does not match sha of file on disk '{}' - deleting surrogate binary at {}", - embeded_file_sha, + embedded_file_sha, file_on_disk_sha, &surrogate_process_path.display() ); diff --git a/src/hyperlight_host/src/mem/exe.rs b/src/hyperlight_host/src/mem/exe.rs index 89bf9f88..4c82e6af 100644 --- a/src/hyperlight_host/src/mem/exe.rs +++ b/src/hyperlight_host/src/mem/exe.rs @@ -24,7 +24,7 @@ use super::pe::pe_info::PEInfo; use super::ptr_offset::Offset; use crate::Result; -// This is used extremely infrequently, so being unusally large for PE +// This is used extremely infrequently, so being unusually large for PE // files _really_ doesn't matter, and probably isn't really worth the // cost of an indirection. #[allow(clippy::large_enum_variant)] diff --git a/src/hyperlight_host/src/mem/layout.rs b/src/hyperlight_host/src/mem/layout.rs index 14103559..14295fb7 100644 --- a/src/hyperlight_host/src/mem/layout.rs +++ b/src/hyperlight_host/src/mem/layout.rs @@ -515,7 +515,7 @@ impl SandboxMemoryLayout { /// Get the offset in guest memory to the output data pointer. #[instrument(skip_all, parent = Span::current(), level= "Trace")] fn get_output_data_pointer_offset(&self) -> usize { - // This field is immedaitely after the output data size field, + // This field is immediately after the output data size field, // which is a `u64`. self.get_output_data_size_offset() + size_of::() } @@ -626,7 +626,7 @@ impl SandboxMemoryLayout { #[instrument(skip_all, parent = Span::current(), level= "Trace")] pub(crate) fn get_guest_panic_context_buffer_pointer_offset(&self) -> usize { // The guest panic data pointer is immediately after the guest - // panic data size field in the `GuestPanicCOntext` data which is a `u64` + // panic data size field in the `GuestPanicContext` data which is a `u64` self.get_guest_panic_context_size_offset() + size_of::() } @@ -715,7 +715,7 @@ impl SandboxMemoryLayout { stack_size: usize, heap_size: usize, ) -> usize { - // Get the conigured memory size (assume each section is 4K aligned) + // Get the configured memory size (assume each section is 4K aligned) let mut total_mapped_memory_size: usize = round_up_to(code_size, PAGE_SIZE_USIZE); total_mapped_memory_size += round_up_to(stack_size, PAGE_SIZE_USIZE); diff --git a/src/hyperlight_host/src/mem/loaded_lib.rs b/src/hyperlight_host/src/mem/loaded_lib.rs index 0e45dd4a..f579d2e1 100644 --- a/src/hyperlight_host/src/mem/loaded_lib.rs +++ b/src/hyperlight_host/src/mem/loaded_lib.rs @@ -57,7 +57,7 @@ impl LoadedLib { let mut lock = LOADED_LIB.lock().unwrap(); if lock.upgrade().is_some() { // An owning copy of the loaded library still exists somewhere, - // we can't load a new libary yet + // we can't load a new library yet log_then_return!("LoadedLib: Only one guest binary can be loaded at any single time"); } let inner = Arc::new(LoadedLibInner::load(path)?); diff --git a/src/hyperlight_host/src/mem/mgr.rs b/src/hyperlight_host/src/mem/mgr.rs index e6537a9e..dd5749cf 100644 --- a/src/hyperlight_host/src/mem/mgr.rs +++ b/src/hyperlight_host/src/mem/mgr.rs @@ -207,7 +207,7 @@ where PAGE_PRESENT | PAGE_RW | PAGE_USER | PAGE_NX } // The guard page is marked RW and User so that if it gets written to we can detect it in the host - // If/When we implement an interupt handler for page faults in the guest then we can remove this access and handle things properly there + // If/When we implement an interrupt handler for page faults in the guest then we can remove this access and handle things properly there MemoryRegionType::GuardPage => { PAGE_PRESENT | PAGE_RW | PAGE_USER | PAGE_NX } @@ -585,7 +585,7 @@ impl SandboxMemoryManager { // addresses that are valid are in its own address space. // // When executing in-process, maniulating this pointer could cause the - // host to execute arbitary functions. + // host to execute arbitrary functions. let guest_ptr = GuestPtr::try_from(RawPtr::from(guest_dispatch_function_ptr))?; guest_ptr.absolute() } diff --git a/src/hyperlight_host/src/mem/mod.rs b/src/hyperlight_host/src/mem/mod.rs index ea679fc4..3e6c2aa5 100644 --- a/src/hyperlight_host/src/mem/mod.rs +++ b/src/hyperlight_host/src/mem/mod.rs @@ -29,7 +29,7 @@ pub mod layout; pub(super) mod loaded_lib; /// memory regions to be mapped inside a vm pub mod memory_region; -/// Functionality taht wraps a `SandboxMemoryLayout` and a +/// Functionality that wraps a `SandboxMemoryLayout` and a /// `SandboxMemoryConfig` to mutate a sandbox's memory as necessary. pub mod mgr; /// Functionality to read and mutate a PE file in a structured manner. diff --git a/src/hyperlight_host/src/mem/pe/mod.rs b/src/hyperlight_host/src/mem/pe/mod.rs index 37bad24e..554aaffd 100644 --- a/src/hyperlight_host/src/mem/pe/mod.rs +++ b/src/hyperlight_host/src/mem/pe/mod.rs @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -/// Extends goblin to suport base relocations in PE file +/// Extends goblin to support base relocations in PE file pub(super) mod base_relocations; /// PE file headers pub(super) mod headers; diff --git a/src/hyperlight_host/src/mem/shared_mem.rs b/src/hyperlight_host/src/mem/shared_mem.rs index 517c3f52..88db56dc 100644 --- a/src/hyperlight_host/src/mem/shared_mem.rs +++ b/src/hyperlight_host/src/mem/shared_mem.rs @@ -560,7 +560,7 @@ impl ExclusiveSharedMemory { /// Convert the ExclusiveSharedMemory, which may be freely /// modified, into a GuestSharedMemory, which may be somewhat /// freely modified (mostly by the guest), and a HostSharedMemory, - /// which may only make certain kinds of acceses that do not race + /// which may only make certain kinds of accesses that do not race /// in the presence of malicious code inside the guest mutating /// the GuestSharedMemory. pub fn build(self) -> (HostSharedMemory, GuestSharedMemory) { @@ -1095,7 +1095,7 @@ mod tests { /// Marking this test as ignored means that running `cargo test` will not /// run it. This feature will allow a developer who runs that command /// from their workstation to be successful without needing to know about - /// test interdependencies. This test will, however, be run explcitly as a + /// test interdependencies. This test will, however, be run explicitly as a /// part of the CI pipeline. #[test] #[ignore] diff --git a/src/hyperlight_host/src/metrics/mod.rs b/src/hyperlight_host/src/metrics/mod.rs index 5d4171ac..7ff3e6fa 100644 --- a/src/hyperlight_host/src/metrics/mod.rs +++ b/src/hyperlight_host/src/metrics/mod.rs @@ -243,7 +243,7 @@ pub fn set_metrics_registry(registry: &'static Registry) -> Result<()> { REGISTRY .set(registry) // This should be impossible - .map_err(|e| new_error!("Registry alread set : {0:?}", e)) + .map_err(|e| new_error!("Registry already set : {0:?}", e)) } } } @@ -259,7 +259,7 @@ fn get_histogram_opts(name: &str, help: &str, buckets: Vec) -> HistogramOpt opts.buckets(buckets) } -/// Provides functionaility to help with testing Hyperlight Metrics +/// Provides functionality to help with testing Hyperlight Metrics pub mod tests { use std::collections::HashSet; @@ -281,11 +281,11 @@ pub mod tests { fn enum_has_variant_for_all_metrics() { let metric_definitions = Self::get_metric_definitions().iter(); for metric_definition in metric_definitions { - let metric_defintion_name = metric_definition.name; + let metric_definition_name = metric_definition.name; assert!( - Self::get_enum_variant_names().contains(&metric_defintion_name), + Self::get_enum_variant_names().contains(&metric_definition_name), "Metric Definition Name {} not found", - metric_defintion_name, + metric_definition_name, ); } } diff --git a/src/hyperlight_host/src/sandbox/initialized_multi_use.rs b/src/hyperlight_host/src/sandbox/initialized_multi_use.rs index 4e0490d9..7e40b0bb 100644 --- a/src/hyperlight_host/src/sandbox/initialized_multi_use.rs +++ b/src/hyperlight_host/src/sandbox/initialized_multi_use.rs @@ -91,7 +91,7 @@ impl MultiUseSandbox { /// `MultiUseGuestCallContext` is guaranteed mutual exclusion for calling /// functions within the sandbox. This guarantee is enforced at compile /// time, and no locks, atomics, or any other mutual exclusion mechanisms - /// are used at rumtime. + /// are used at runtime. /// /// If you have called this function, have a `MultiUseGuestCallContext`, /// and wish to "return" it to a `MultiUseSandbox`, call the `finish` @@ -238,7 +238,7 @@ where /// An implementation such as HyperlightJs or HyperlightWasm can use this to call guest functions to load JS or WASM code and then evolve the sandbox causing state to be captured. /// The new MultiUseSandbox can then be used to call guest functions to execute the loaded code. /// - /// The evolve function creates a new MutliUseCallContext which is then passed to a callback function allowing the + /// The evolve function creates a new MultiUseCallContext which is then passed to a callback function allowing the /// callback function to call guest functions as part of the evolve process, once the callback function is complete /// the context is finished using a crate internal method that does not restore the prior state of the Sanbbox. /// It then creates a mew memory snapshot on the snapshot stack and returns the MultiUseSandbox diff --git a/src/hyperlight_host/src/sandbox/initialized_single_use.rs b/src/hyperlight_host/src/sandbox/initialized_single_use.rs index 7b3a0809..27e5be0c 100644 --- a/src/hyperlight_host/src/sandbox/initialized_single_use.rs +++ b/src/hyperlight_host/src/sandbox/initialized_single_use.rs @@ -76,7 +76,7 @@ impl SingleUseSandbox { } /// Create a new `SingleUseCallContext` . The main purpose of the - /// a SingleUseSandbox is to allow mutiple calls to guest functions from within a callback function. + /// a SingleUseSandbox is to allow multiple calls to guest functions from within a callback function. /// /// Since this function consumes `self`, the returned /// `SingleUseGuestCallContext` is guaranteed mutual exclusion for calling diff --git a/src/hyperlight_host/src/sandbox/metrics.rs b/src/hyperlight_host/src/sandbox/metrics.rs index 5f2da3a7..840b003a 100644 --- a/src/hyperlight_host/src/sandbox/metrics.rs +++ b/src/hyperlight_host/src/sandbox/metrics.rs @@ -15,7 +15,7 @@ limitations under the License. */ /*! -This modue contains the definitions and implementations of the metrics used by the sandbox module +This module contains the definitions and implementations of the metrics used by the sandbox module */ use std::collections::HashMap; use std::sync::Once; @@ -150,7 +150,7 @@ mod tests { /// Marking this test as ignored means that running `cargo test` will not /// run it. This feature will allow a developer who runs that command /// from their workstation to be successful without needing to know about - /// test interdependencies. This test will, however, be run explcitly as a + /// test interdependencies. This test will, however, be run explicitly as a /// part of the CI pipeline. fn test_metrics() { let iter: SandboxMetricIter = SandboxMetric::iter(); @@ -226,7 +226,7 @@ mod tests { assert_eq!(histogram.get_sample_sum(&label_vals).unwrap(), 1.0); } _ => { - panic!("metric is not an IntGauge,IntCounterVec or HistorgamVec"); + panic!("metric is not an IntGauge,IntCounterVec or HistogramVec"); } }, Err(e) => { @@ -242,7 +242,7 @@ mod tests { /// Marking this test as ignored means that running `cargo test` will not /// run it. This feature will allow a developer who runs that command /// from their workstation to be successful without needing to know about - /// test interdependencies. This test will, however, be run explcitly as a + /// test interdependencies. This test will, however, be run explicitly as a /// part of the CI pipeline. fn test_gather_metrics() { lazy_static! { diff --git a/src/hyperlight_host/src/sandbox/mod.rs b/src/hyperlight_host/src/sandbox/mod.rs index 47a78cec..baf1360c 100644 --- a/src/hyperlight_host/src/sandbox/mod.rs +++ b/src/hyperlight_host/src/sandbox/mod.rs @@ -44,7 +44,7 @@ mod run_options; /// Functionality for creating uninitialized sandboxes, manipulating them, /// and converting them to initialized sandboxes. pub mod uninitialized; -/// Functionality for properly converting `UninitailizedSandbox`es to +/// Functionality for properly converting `UninitializedSandbox`es to /// initialized `Sandbox`es. pub(crate) mod uninitialized_evolve; diff --git a/src/hyperlight_host/src/sandbox/outb.rs b/src/hyperlight_host/src/sandbox/outb.rs index 4f5f0ce1..dd359ebb 100644 --- a/src/hyperlight_host/src/sandbox/outb.rs +++ b/src/hyperlight_host/src/sandbox/outb.rs @@ -322,7 +322,7 @@ mod tests { // this test is ignored because it is incompatible with other tests , specifically those which require a logger for tracing // marking this test as ignored means that running `cargo test` will not run this test but will allow a developer who runs that command // from their workstation to be successful without needed to know about test interdependencies - // this test will be run explcitly as a part of the CI pipeline + // this test will be run explicitly as a part of the CI pipeline #[ignore] #[test] fn test_trace_outb_log() { diff --git a/src/hyperlight_host/src/sandbox/uninitialized.rs b/src/hyperlight_host/src/sandbox/uninitialized.rs index 394f157d..eaa573de 100644 --- a/src/hyperlight_host/src/sandbox/uninitialized.rs +++ b/src/hyperlight_host/src/sandbox/uninitialized.rs @@ -856,7 +856,7 @@ mod tests { // this test is ignored because it is incompatible with other tests , specifically those which require a logger for tracing // marking this test as ignored means that running `cargo test` will not run this test but will allow a developer who runs that command // from their workstation to be successful without needed to know about test interdependencies - // this test will be run explcitly as a part of the CI pipeline + // this test will be run explicitly as a part of the CI pipeline #[ignore] fn test_trace_trace() { TestLogger::initialize_log_tracer(); diff --git a/src/hyperlight_host/src/sandbox_state/mod.rs b/src/hyperlight_host/src/sandbox_state/mod.rs index de1a8108..3a7bd52d 100644 --- a/src/hyperlight_host/src/sandbox_state/mod.rs +++ b/src/hyperlight_host/src/sandbox_state/mod.rs @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -/// The standarized `Sandbox` trait and the ways it ban be transitioned +/// The standardized `Sandbox` trait and the ways it ban be transitioned /// to a different `Sandbox` trait pub mod sandbox; /// Metadata about transitions between `Sandbox` states diff --git a/src/hyperlight_host/src/sandbox_state/sandbox.rs b/src/hyperlight_host/src/sandbox_state/sandbox.rs index d0b5b8c0..258de8b2 100644 --- a/src/hyperlight_host/src/sandbox_state/sandbox.rs +++ b/src/hyperlight_host/src/sandbox_state/sandbox.rs @@ -43,7 +43,7 @@ pub trait Sandbox: Sized + Debug { /// `Ok(true)` in the same situation where the stack guard does match. /// - // NOTE: this is only needed for UnitilizedSandbox, SingleUseSandbox, and MultiUseSandbox + // NOTE: this is only needed for UninitializedSandbox, SingleUseSandbox, and MultiUseSandbox // Those are the only types that need implement this trait // The default implementation is provided so that types that implement Sandbox (e.g. JSSandbox) but do not need to implement this trait do not need to provide an implementation #[instrument(skip_all, parent = Span::current(), level= "Trace")] diff --git a/src/hyperlight_host/src/testing/log_values.rs b/src/hyperlight_host/src/testing/log_values.rs index 79643107..9017d394 100644 --- a/src/hyperlight_host/src/testing/log_values.rs +++ b/src/hyperlight_host/src/testing/log_values.rs @@ -68,7 +68,7 @@ pub(crate) type MapLookup<'a> = (&'a Map, &'a str); /// Given a constant-size slice of `MapLookup`s, attempt to look up the /// string value in each `MapLookup`'s map (the first tuple element) for /// that `MapLookup`'s key (the second tuple element). If the lookup -/// succeeded, attempt to conver the resulting value to a string. Return +/// succeeded, attempt to convert the resulting value to a string. Return /// `Ok` with all the successfully looked-up string values, or `Err` /// if any one or more lookups or string conversions failed. pub(crate) fn try_to_strings<'a, const NUM: usize>( diff --git a/src/hyperlight_host/tests/common/mod.rs b/src/hyperlight_host/tests/common/mod.rs index d8ed8edd..a616c3d5 100644 --- a/src/hyperlight_host/tests/common/mod.rs +++ b/src/hyperlight_host/tests/common/mod.rs @@ -24,7 +24,7 @@ use hyperlight_testing::{ }; /// Returns a rust/c simpleguest depending on environment variable GUEST. -/// Uses rust guest by default. Run test with envirnoment variable GUEST="c" to use the c version +/// Uses rust guest by default. Run test with environment variable GUEST="c" to use the c version /// If a test is only applicable to rust, use `new_uninit_rust`` instead pub fn new_uninit() -> Result { UninitializedSandbox::new( diff --git a/src/schema/function_call.fbs b/src/schema/function_call.fbs index fe723f5e..9ad0d8dd 100644 --- a/src/schema/function_call.fbs +++ b/src/schema/function_call.fbs @@ -3,7 +3,7 @@ include "function_types.fbs"; namespace Hyperlight.Generated; enum FunctionCallType : ubyte { - // none is invalid, its the default, its only here to ensure that the type is explicity set to guest or host as none should fail validation if a buffer using it is written to memory + // none is invalid, its the default, its only here to ensure that the type is explicitly set to guest or host as none should fail validation if a buffer using it is written to memory none, guest, host, diff --git a/src/schema/function_types.fbs b/src/schema/function_types.fbs index 679cdb3d..d5c209ff 100644 --- a/src/schema/function_types.fbs +++ b/src/schema/function_types.fbs @@ -1,6 +1,6 @@ namespace Hyperlight.Generated; -// the folowing tables are used to hold the values of the parameters and return values of functions +// the following tables are used to hold the values of the parameters and return values of functions // they are named with hl prefix to avoid reserved word clashes in generated code // hlint is a 32 bit signed integer diff --git a/typos.toml b/typos.toml new file mode 100644 index 00000000..434a71b6 --- /dev/null +++ b/typos.toml @@ -0,0 +1,5 @@ +[default] +extend-ignore-identifiers-re = ["Fo"] + +[files] +extend-exclude = ["**/*.patch", "src/hyperlight_guest/third_party/**/*", "NOTICE.txt"] From dcbddc36354be7ab8fbb5d7dd3e99828e3cc730c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Doru=20Bl=C3=A2nzeanu?= Date: Mon, 18 Nov 2024 09:22:17 +0200 Subject: [PATCH 03/17] Add devcontainer config (#54) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add dev container configuration The following dev container configuration can be found in the .devcontainer directory. It contains: - devcontainer.json a configuration file for the Dev container that puts everything toghether - create_env.sh script that is run on the host machine and creates a .devcontainer/.env file that contains the necessary group info for the container image build phase - Dockerfile.base config for a base container image that is pre-built by using the .github/workflows/CreateDevcontainerImage.yml action that is automatically triggered when a change is detected for Dockerfile.base or the workflow configuration. - Dockerfile config that uses the pre-build image as a base image, creates a group with the same GID of the device being passed to the docker container and adds the user to that group Note: The reason why the environment file generation is needed is because in order to access the device (/dev/kvm) inside the container, the user needs to belong to the correct group, so the group is created at image build time. Signed-off-by: Doru Blânzeanu * Change the link to GHCR image Signed-off-by: Doru Blânzeanu * Change device ownership inside the container - This avoids creating a new group in a new container image - Also there is no need for the environment file to be dynamically generated Signed-off-by: Doru Blânzeanu * Update Dockerfile in github action Signed-off-by: Doru Blânzeanu * Update GHCR link to use the hyperlight-dev container image Signed-off-by: Doru Blânzeanu * Add defaults to arguments of container image Dockerfile Signed-off-by: Doru Blânzeanu * Fix Dockerfile and update workflow to read the rust version Signed-off-by: Doru Blânzeanu * Add codespace reference to README.md Signed-off-by: Doru Blânzeanu * Remove unused persmission for gh workflow Signed-off-by: Doru Blânzeanu * Small changes to comments and bash script for consistency Signed-off-by: Doru Blânzeanu * Add gnuplot to devcontainer image Signed-off-by: Doru Blânzeanu --------- Signed-off-by: Doru Blânzeanu --- .devcontainer/Dockerfile | 63 ++++++++++++++++ .devcontainer/devcontainer.json | 33 +++++++++ .devcontainer/setup.sh | 5 ++ .github/workflows/CreateDevcontainerImage.yml | 71 +++++++++++++++++++ .gitignore | 2 +- README.md | 4 ++ 6 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/setup.sh create mode 100644 .github/workflows/CreateDevcontainerImage.yml diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..0b002dab --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,63 @@ +## Dockerfile for devcontainer + +FROM mcr.microsoft.com/devcontainers/base:debian AS base + +ARG USER=vscode +ARG GROUP=vscode + +ENV HOME="/home/${USER}" +ENV PATH="$HOME/.cargo/bin:$PATH" + +# Install dependencies +RUN apt-get update \ + && apt-get -y install \ + build-essential \ + cmake \ + curl \ + git \ + gnupg \ + gnuplot \ + lsb-release \ + make \ + software-properties-common \ + sudo \ + wget + +ARG LLVM_VERSION=17 + +# Install llvm +RUN wget https://apt.llvm.org/llvm.sh \ + && chmod +x ./llvm.sh \ + && sudo ./llvm.sh ${LLVM_VERSION} all \ + && sudo ln -s /usr/lib/llvm-${LLVM_VERSION}/bin/clang-cl /usr/bin/clang-cl \ + && sudo ln -s /usr/lib/llvm-${LLVM_VERSION}/bin/llvm-lib /usr/bin/llvm-lib \ + && sudo ln -s /usr/lib/llvm-${LLVM_VERSION}/bin/lld-link /usr/bin/lld-link \ + && sudo ln -s /usr/lib/llvm-${LLVM_VERSION}/bin/llvm-ml /usr/bin/llvm-ml \ + && sudo ln -s /usr/lib/llvm-${LLVM_VERSION}/bin/ld.lld /usr/bin/ld.lld \ + && sudo ln -s /usr/lib/llvm-${LLVM_VERSION}/bin/clang /usr/bin/clang + +FROM base AS dev + +# Make sure the devcontainer user has sudo access +RUN chown -R "${USER}:${GROUP}" /home/${USER} \ + && echo "${USER} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +# Persist bash hystory +RUN SNIPPET="export PROMPT_COMMAND='history -a' && export HISTFILE=/commandhistory/.bash_history" \ + && mkdir /commandhistory \ + && touch /commandhistory/.bash_history \ + && chown -R "${USER}" /commandhistory \ + && echo "$SNIPPET" >> "/home/${USER}/.bashrc" + +USER $USER + +ARG RUST_TOOLCHAIN=1.81.0 + +# Install rust +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ + && rustup default ${RUST_TOOLCHAIN} \ + && rustup target add x86_64-unknown-linux-gnu \ + && rustup target add x86_64-unknown-none \ + && rustup target add x86_64-pc-windows-msvc \ + && cargo install just + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..d76b2985 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +// For more info on the configuration below, check out the link: +// https://code.visualstudio.com/docs/devcontainers/create-dev-container +{ + "name": "Hyperlight", + + "image": "ghcr.io/hyperlight-dev/hyperlight-devcontainer:latest", + + "containerUser": "vscode", + // Environment for the container also used by the `postCreateCommand` + "containerEnv": { + "DEVICE": "/dev/kvm", + "KVM_SHOULD_BE_PRESENT": "true", + "REMOTE_USER": "vscode", + "REMOTE_GROUP": "vscode" + }, + + "runArgs": [ + "--device=/dev/kvm" + ], + + // Use 'postCreateCommand' to run commands after the container is created + "postCreateCommand": "bash .devcontainer/setup.sh", + + "customizations": { + "vscode": { + "extensions": [ + "ms-vscode.cmake-tools", + "rust-lang.rust-analyzer", + "vadimcn.vscode-lldb" + ] + } + } +} diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100644 index 00000000..db7b7196 --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Change device ownership +sudo chown -R $REMOTE_USER:$REMOTE_GROUP $DEVICE + diff --git a/.github/workflows/CreateDevcontainerImage.yml b/.github/workflows/CreateDevcontainerImage.yml new file mode 100644 index 00000000..de6fd4cb --- /dev/null +++ b/.github/workflows/CreateDevcontainerImage.yml @@ -0,0 +1,71 @@ +name: Create and publish devcontainer Docker image + +on: + push: + branches: + - "main" + paths: + - ".devcontainer/Dockerfile" + - ".github/workflows/CreateDevcontainerImage.yml" + - "rust-toolchain.toml" + +# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }}-devcontainer + USER: vscode + GROUP: vscode + LLVM_VERSION: 17 + RUST_TOOLCHAIN_DEFAULT: 1.81.0 + RUST_TOOLCHAIN_FILE: rust-toolchain.toml + +# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. +jobs: + build-and-push-image: + runs-on: ubuntu-latest + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Read Rust toolchain version from ${{ env.RUST_TOOLCHAIN_FILE }} + id: toolchain + run: | + version=$(cat ${{ env.RUST_TOOLCHAIN_FILE }} | sed -n '/\[toolchain\]/,/^\[/{/^\s*channel = /s/[^"]*"\([^"]*\)".*/\1/p}') + cat ${{ env.RUST_TOOLCHAIN_FILE }} | grep $version &> /dev/null \ + && echo "RUST_TOOLCHAIN=${version}" >> "$GITHUB_OUTPUT" \ + || echo "RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN_FILE }}" >> "$GITHUB_OUTPUT" + + # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. + - name: Log in to the Container registry + uses: docker/login-action@v1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@v6 + with: + context: ./.devcontainer + push: true + tags: | + ${{ steps.meta.outputs.tags }} + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + labels: ${{ steps.meta.outputs.labels }} + build-args: | + USER=${{ env.USER }} + GROUP=${{ env.GROUP }} + LLVM_VERSION=${{ env.LLVM_VERSION }} + RUST_TOOLCHAIN=${{ steps.toolchain.outputs.RUST_TOOLCHAIN }} diff --git a/.gitignore b/.gitignore index 3a2238ee..fd2e45d7 100644 --- a/.gitignore +++ b/.gitignore @@ -474,4 +474,4 @@ hyperlight_guest.h # created by vs code c# extension .mono -!.gitkeep \ No newline at end of file +!.gitkeep diff --git a/README.md b/README.md index 1552ee0b..aa313e58 100644 --- a/README.md +++ b/README.md @@ -224,6 +224,10 @@ If you get the error `Error: NoHypervisorFound` and KVM or mshv is set up then t For more details on how to verify that KVM is correctly installed and permissions are correct, follow the guide [here](https://help.ubuntu.com/community/KVM/Installation). +### Or you can use a codespace + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/hyperlight-dev/hyperlight) + ## Contributing to Hyperlight If you are interested in contributing to Hyperlight, running the entire test-suite is a good way to get started. To do so, on your console, run the following commands: From 558915fd2d192e2ef5ba57ce011a7bc883cc6186 Mon Sep 17 00:00:00 2001 From: "Krishnakumar R (KK)" <65895020+kk-src@users.noreply.github.com> Date: Sun, 17 Nov 2024 23:29:28 -0800 Subject: [PATCH 04/17] Fix README links (#60) Fix the README links in "For developers" section to append .md file extension(issue #59). Signed-off-by: Krishnakumar R (KK) <65895020+kk-src@users.noreply.github.com> --- docs/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/README.md b/docs/README.md index c71c3990..10ceaca9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -32,12 +32,12 @@ This project is composed internally of several internal components, depicted in ## For developers -* [Security guidance for developers](./security-guidance-for-developers) -* [Paging Development Notes](./paging-development-notes) -* [How to use Flatbuffers in Hyperlight](./how-to-use-flatbuffers) -* [How to make a Hyperlight release](./how-to-make-releases) -* [Getting Hyperlight Metrics, Logs, and Traces](./hyperlight-metrics-logs-and-traces) -* [Benchmarking Hyperlight](./benchmarking-hyperlight) -* [Hyperlight Surrogate Development Notes](./hyperlight-surrogate-development-notes) -* [Debugging Hyperlight](./debugging-hyperlight) +* [Security guidance for developers](./security-guidance-for-developers.md) +* [Paging Development Notes](./paging-development-notes.md) +* [How to use Flatbuffers in Hyperlight](./how-to-use-flatbuffers.md) +* [How to make a Hyperlight release](./how-to-make-releases.md) +* [Getting Hyperlight Metrics, Logs, and Traces](./hyperlight-metrics-logs-and-traces.md) +* [Benchmarking Hyperlight](./benchmarking-hyperlight.md) +* [Hyperlight Surrogate Development Notes](./hyperlight-surrogate-development-notes.md) +* [Debugging Hyperlight](./debugging-hyperlight.md) * [Signal Handling in Hyperlight](./signal-handlers-development-notes.md) From e5e7934b9b712d966f7f2ad7ab688db1ae9fb634 Mon Sep 17 00:00:00 2001 From: Dan Chiarlone Date: Mon, 18 Nov 2024 13:43:44 -0800 Subject: [PATCH 05/17] [dependencies] add Cargo.lock (#65) * [dependencies] removed unused dependencies ran cargo +nightly udeps to find then remove unused dependencies Signed-off-by: danbugs * [dependencies] removed Cargo.lock from .gitignore and included updated Cargo.lock ran cargo update to update the Cargo.lock Signed-off-by: danbugs * [dependencies] bringing back uuid but as a dev-dependency Signed-off-by: danbugs * [dependencies] re-adding rust-embed and sha256 as windows dependencies Signed-off-by: danbugs --------- Signed-off-by: danbugs --- .gitignore | 4 - Cargo.lock | 3494 +++++++++++++++++++++++++++++ src/hyperlight_host/Cargo.toml | 14 +- src/hyperlight_testing/Cargo.toml | 2 - 4 files changed, 3501 insertions(+), 13 deletions(-) create mode 100644 Cargo.lock diff --git a/.gitignore b/.gitignore index fd2e45d7..1e3a4690 100644 --- a/.gitignore +++ b/.gitignore @@ -457,10 +457,6 @@ $RECYCLE.BIN/ # Rust build artifacts **/**target -**/Cargo.lock -!src/tests/rust_guests/callbackguest/Cargo.lock -!src/tests/rust_guests/simpleguest/Cargo.lock -!src/tests/rust_guests/dummyguest/Cargo.lock libhyperlight_host.so libhyperlight_host.d hyperlight_host.dll diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..942f4ec6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,3494 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" + +[[package]] +name = "arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 1.0.1", + "tower 0.5.1", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.1", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bstr" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "buddy_system_allocator" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0108968a3a2dab95b089c0fc3f1afa7759aa5ebe6f1d86d206d6f7ba726eb" +dependencies = [ + "spin", +] + +[[package]] +name = "built" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c360505aed52b7ec96a3636c3f039d99103c37d1d9b4f7a8c743d3ea9ffcd03b" +dependencies = [ + "chrono", + "git2", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cbindgen" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fce8dd7fcfcbf3a0a87d8f515194b49d6135acab73e18bd380d1d93bb1a15eb" +dependencies = [ + "clap", + "heck 0.4.1", + "indexmap 2.6.0", + "log", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", + "tempfile", + "toml", +] + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_lex" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +dependencies = [ + "libc", +] + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools 0.10.5", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools 0.10.5", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "env_filter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "envy" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965" +dependencies = [ + "serde", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" + +[[package]] +name = "flatbuffers" +version = "24.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f" +dependencies = [ + "bitflags 1.3.2", + "rustc_version", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "git2" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" +dependencies = [ + "bitflags 2.6.0", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "goblin" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53ab3f32d1d77146981dea5d6b1e8fe31eedcb7013e5e00d6ccd1259a4b4d923" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.6.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-timeout" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" +dependencies = [ + "hyper", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "hyperlight-common" +version = "0.1.0" +dependencies = [ + "anyhow", + "flatbuffers", + "hyperlight-testing", + "log", + "strum", + "strum_macros 0.26.4", + "tracing", +] + +[[package]] +name = "hyperlight-guest" +version = "0.1.0" +dependencies = [ + "anyhow", + "buddy_system_allocator", + "cc", + "cfg-if", + "hyperlight-common", + "log", + "serde_json", + "spin", +] + +[[package]] +name = "hyperlight-host" +version = "0.1.0" +dependencies = [ + "anyhow", + "bitflags 2.6.0", + "built", + "cfg-if", + "cfg_aliases", + "criterion", + "crossbeam", + "crossbeam-channel", + "crossbeam-queue", + "env_logger", + "envy", + "flatbuffers", + "goblin", + "hyperlight-common", + "hyperlight-testing", + "kvm-bindings", + "kvm-ioctls", + "lazy_static", + "libc", + "log", + "mshv-bindings", + "mshv-ioctls", + "once_cell", + "opentelemetry", + "opentelemetry-otlp", + "opentelemetry_sdk", + "page_size", + "paste", + "proc-maps", + "prometheus", + "proptest", + "rand", + "rust-embed", + "seccompiler", + "serde", + "serde_json", + "serde_yaml", + "serial_test", + "sha256", + "signal-hook-registry", + "strum", + "tempfile", + "termcolor", + "thiserror 2.0.3", + "tokio", + "tracing", + "tracing-chrome", + "tracing-core", + "tracing-forest", + "tracing-log", + "tracing-opentelemetry", + "tracing-serde", + "tracing-subscriber", + "uuid", + "vmm-sys-util", + "windows", + "windows-result", + "windows-sys 0.59.0", +] + +[[package]] +name = "hyperlight-testing" +version = "0.0.0" +dependencies = [ + "anyhow", + "log", + "once_cell", + "serde", + "serde_json", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "hyperlight_guest_capi" +version = "0.1.0" +dependencies = [ + "cbindgen", + "hyperlight-common", + "hyperlight-guest", + "log", +] + +[[package]] +name = "hyperlight_host-fuzz" +version = "0.0.0" +dependencies = [ + "hyperlight-host", + "hyperlight-testing", + "libfuzzer-sys", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.1", +] + +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kvm-bindings" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4933174d0cc4b77b958578cd45784071cc5ae212c2d78fbd755aaaa6dfa71a" +dependencies = [ + "vmm-sys-util", +] + +[[package]] +name = "kvm-ioctls" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "337d1afa126368bbd6a5c328048f71a69a737e9afe7e436b392a8f8d770c9171" +dependencies = [ + "bitflags 2.6.0", + "kvm-bindings", + "libc", + "vmm-sys-util", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" + +[[package]] +name = "libfuzzer-sys" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa" +dependencies = [ + "arbitrary", + "cc", +] + +[[package]] +name = "libgit2-sys" +version = "0.17.0+1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libproc" +version = "0.14.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78a09b56be5adbcad5aa1197371688dc6bb249a26da3bca2011ee2fb987ebfb" +dependencies = [ + "bindgen", + "errno", + "libc", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "libz-sys" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "mshv-bindings" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f416b4432174e5a3f956a7887f4c1a4acea9511d81def67fcb8473293630ab9e" +dependencies = [ + "libc", + "num_enum", + "vmm-sys-util", + "zerocopy", +] + +[[package]] +name = "mshv-ioctls" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d57586da719aacc905042eea71ff2efb52d16c7228a94af155c9ea45fe09c1c7" +dependencies = [ + "libc", + "mshv-bindings", + "thiserror 1.0.69", + "vmm-sys-util", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "oorandom" +version = "11.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" + +[[package]] +name = "opentelemetry" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "570074cc999d1a58184080966e5bd3bf3a9a4af650c3b05047c2621e7405cd17" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", +] + +[[package]] +name = "opentelemetry-otlp" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29e1f9c8b032d4f635c730c0efcf731d5e2530ea13fa8bef7939ddc8420696bd" +dependencies = [ + "async-trait", + "futures-core", + "http", + "opentelemetry", + "opentelemetry-proto", + "opentelemetry_sdk", + "prost", + "thiserror 1.0.69", + "tokio", + "tonic", +] + +[[package]] +name = "opentelemetry-proto" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d3968ce3aefdcca5c27e3c4ea4391b37547726a70893aab52d3de95d5f8b34" +dependencies = [ + "opentelemetry", + "opentelemetry_sdk", + "prost", + "tonic", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c627d9f4c9cdc1f21a29ee4bfbd6028fcb8bcf2a857b43f3abdf72c9c862f3" +dependencies = [ + "async-trait", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "once_cell", + "opentelemetry", + "percent-encoding", + "rand", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "page_size" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d5b2194ed13191c1999ae0704b7839fb18384fa22e49b57eeaa97d79ce40da" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "plotters" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a" + +[[package]] +name = "plotters-svg" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-maps" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db44c5aa60e193a25fcd93bb9ed27423827e8f118897866f946e2cf936c44fb" +dependencies = [ + "anyhow", + "bindgen", + "libc", + "libproc", + "mach2", + "winapi", +] + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "protobuf", + "thiserror 1.0.69", +] + +[[package]] +name = "proptest" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +dependencies = [ + "bit-set", + "bit-vec", + "bitflags 2.6.0", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.5", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "prost" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rust-embed" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "shellexpand", + "syn", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d" +dependencies = [ + "globset", + "sha2", + "walkdir", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scc" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b202022bb57c049555430e11fc22fea12909276a80a4c3d368da36ac1d88ed" +dependencies = [ + "sdd", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sdd" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" + +[[package]] +name = "seccompiler" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345a3e4dddf721a478089d4697b83c6c0a8f5bf16086f6c13397e4534eb6e2e5" +dependencies = [ + "libc", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.6.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial_test" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha256" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" +dependencies = [ + "async-trait", + "bytes", + "hex", + "sha2", + "tokio", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shellexpand" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[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", +] + +[[package]] +name = "syn" +version = "2.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tempfile" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap 2.6.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tonic" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64", + "bytes", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-timeout", + "hyper-util", + "percent-encoding", + "pin-project", + "prost", + "socket2", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-chrome" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf0a738ed5d6450a9fb96e86a23ad808de2b727fd1394585da5cdd6788ffe724" +dependencies = [ + "serde_json", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "chrono", + "serde", + "smallvec", + "thiserror 1.0.69", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc58af5d3f6c5811462cabb3289aec0093f7338e367e5a33d28c0433b3c7360b" +dependencies = [ + "js-sys", + "once_cell", + "opentelemetry", + "opentelemetry_sdk", + "smallvec", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber", + "web-time", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "url" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vmm-sys-util" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1435039746e20da4f8d507a72ee1b916f7b4b05af7a91c093d2c6561934ede" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "web-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "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]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "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.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/src/hyperlight_host/Cargo.toml b/src/hyperlight_host/Cargo.toml index 97ec9530..b0218786 100644 --- a/src/hyperlight_host/Cargo.toml +++ b/src/hyperlight_host/Cargo.toml @@ -38,17 +38,14 @@ once_cell = { version = "1.18.0" } tracing = { version = "0.1.37", features = ["log"] } tracing-log = "0.2.0" tracing-core = "0.1.31" -uuid = { version = "1.4.1", features = ["v4"] } hyperlight-common = { workspace = true, default-features = true } -rust-embed = { version = "8.3.0", features = ["debug-embed", "include-exclude", "interpolate-folder-path"] } -sha256 = "1.4.0" vmm-sys-util = "0.12.1" crossbeam = "0.8.0" crossbeam-channel = "0.5.8" thiserror = "2.0.0" prometheus = "0.13.3" strum = { version = "0.25", features = ["derive"] } -tempfile = {version = "3.10", optional = true} +tempfile = { version = "3.10", optional = true } serde_yaml = "0.9" anyhow = "1.0" @@ -68,6 +65,8 @@ windows = { version = "0.58", features = [ ] } windows-sys = { version = "0.59", features = ["Win32"] } windows-result = "0.2" +rust-embed = { version = "8.3.0", features = ["debug-embed", "include-exclude", "interpolate-folder-path"] } +sha256 = "1.4.0" [target.'cfg(unix)'.dependencies] seccompiler = { version = "0.4.0", optional = true } @@ -77,6 +76,7 @@ kvm-bindings = { version = "0.10.0", features = ["fam-wrappers"], optional = tru kvm-ioctls = { version = "0.19.0", optional = true } [dev-dependencies] +uuid = { version = "1.4.1", features = ["v4"] } signal-hook-registry = "1.4.1" envy = { version = "0.4.2" } serde = "1.0" @@ -87,9 +87,9 @@ tracing-serde = "0.1.3" serial_test = "3.1.1" hyperlight-testing = { workspace = true } env_logger = "0.11.5" -tracing-forest = { version = "0.1.6", features = ["uuid","chrono","smallvec","serde","env-filter"] } +tracing-forest = { version = "0.1.6", features = ["uuid", "chrono", "smallvec", "serde", "env-filter"] } tracing = "0.1.37" -tracing-subscriber = {version = "0.3.18", features = ["std", "env-filter"]} +tracing-subscriber = { version = "0.3.18", features = ["std", "env-filter"] } tracing-opentelemetry = "0.27.0" opentelemetry = "0.26.0" opentelemetry-otlp = { version = "0.26.0", features = ["default"] } @@ -109,7 +109,7 @@ proc-maps = "0.4.0" [build-dependencies] anyhow = { version = "1.0.75" } cfg_aliases = "0.2.1" -built = { version = "0.7.0", features = ["chrono","git2"] } +built = { version = "0.7.0", features = ["chrono", "git2"] } [features] default = ["kvm", "mshv", "seccomp"] diff --git a/src/hyperlight_testing/Cargo.toml b/src/hyperlight_testing/Cargo.toml index 1117eafb..78b883f5 100644 --- a/src/hyperlight_testing/Cargo.toml +++ b/src/hyperlight_testing/Cargo.toml @@ -4,12 +4,10 @@ edition = "2021" [dependencies] anyhow = "1.0.72" -hex-literal = "0.4" log = "0.4" once_cell = "1.19" tracing = { version = "0.1.37", features = ["log"] } tracing-log = "0.2.0" -tracing-subscriber = {version = "0.3.3", features = ["std", "env-filter"]} tracing-core = "0.1.17" tracing-serde = "0.1" serde = { version = "1.0", features = ["derive"] } From 99423b4f7619a11562d2343337779f1fece93732 Mon Sep 17 00:00:00 2001 From: Dan Chiarlone Date: Mon, 18 Nov 2024 15:08:06 -0800 Subject: [PATCH 06/17] [documentation] fix broken links in docs/README.md (#68) Signed-off-by: danbugs --- docs/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/README.md b/docs/README.md index 10ceaca9..1b1572dd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,11 +24,11 @@ This project is composed internally of several internal components, depicted in ## Further reading -* [Glossary](./glossary) -* [How code gets executed in a VM](./hyperlight-execution-details) -* [How to build a Hyperlight guest binary](./how-to-build-a-hyperlight-guest-binary) -* [Security considerations](./security) -* [Technical requirements document](./technical-requirements-document) +* [Glossary](./glossary.md) +* [How code gets executed in a VM](./hyperlight-execution-details.md) +* [How to build a Hyperlight guest binary](./how-to-build-a-hyperlight-guest-binary.md) +* [Security considerations](./security.md) +* [Technical requirements document](./technical-requirements-document.md) ## For developers From a38396b1874aaebe44b64b314040c7d92145b14f Mon Sep 17 00:00:00 2001 From: Dan Chiarlone Date: Mon, 18 Nov 2024 15:30:15 -0800 Subject: [PATCH 07/17] [documentation] adding MAINTAINERS file (#69) * [documentation] adding MAINTAINERS file Signed-off-by: danbugs * [chore] fix alphabetical order Signed-off-by: danbugs --------- Signed-off-by: danbugs --- MAINTAINERS.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 MAINTAINERS.md diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 00000000..c6741c8c --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,15 @@ +# Current Maintainers + +| Name | GitHub ID | +|--------------------|----------------------------------------------------| +| Danilo Chiarlone | [@danbugs](https://github.com/danbugs) | +| David Justice | [@devigned](https://github.com/devigned) | +| Doru Blânzeanu | [@dblnz](https://github.com/dblnz) | +| Jorge Prendes | [@jprendes](https://github.com/jprendes) | +| Lucy Menon | [@syntactically](https://github.com/syntactically) | +| Ludvig Liljenberg | [@ludfjig](https://github.com/ludfjig) | +| Mark Rosetti | [@marosset](https://github.com/marosset) | +| Simon Davies | [@simongdavies](https://github.com/simongdavies) | +| Tomasz Andrzejak | [@andreiltd](https://github.com/andreiltd) | + + From d771dea55609c06d1f7c902e12bce688d351c2da Mon Sep 17 00:00:00 2001 From: Dan Chiarlone Date: Mon, 18 Nov 2024 15:30:56 -0800 Subject: [PATCH 08/17] [documentation] recenter logo on README (#67) * [documentation] recenter logo on README Signed-off-by: danbugs * [documentation] reverting to "align" attribute GitHub markdown doesn't allow using styles, so we need to rely on the obsolote attribute to center the logo Signed-off-by: danbugs --------- Signed-off-by: danbugs --- README.md | 83 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index aa313e58..1e456258 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,34 @@ -
-

Hyperlight

- hyperlight logo -

- Hyperlight is a lightweight Virtual Machine Manager (VMM) designed to be embedded within applications. It enables safe execution of untrusted code within micro virtual machines with very low latency and minimal overhead. - -

+
+

Hyperlight

+ hyperlight logo +

Hyperlight is a lightweight Virtual Machine Manager (VMM) designed to be embedded within applications. It enables safe execution of untrusted code within micro virtual machines with very low latency and minimal overhead.

-> Note: Hyperlight is a nascent project with an evolving API and no guaranteed support. Assistance is provided on a best-effort basis by the developers. +> Note: Hyperlight is a nascent project with an evolving API and no guaranteed support. Assistance is provided on a +> best-effort basis by the developers. --- ## Overview -Hyperlight is a library for creating _micro virtual machines_ — or _sandboxes_ — specifically optimized for securely running untrusted code with minimal impact. It supports both Windows and Linux, utilizing [Windows Hypervisor Platform](https://docs.microsoft.com/en-us/virtualization/api/#windows-hypervisor-platform) on Windows, and either Microsoft Hypervisor (mshv) or [KVM](https://linux-kvm.org/page/Main_Page) on Linux. +Hyperlight is a library for creating _micro virtual machines_ — or _sandboxes_ — specifically optimized for securely +running untrusted code with minimal impact. It supports both Windows and Linux, +utilizing [Windows Hypervisor Platform](https://docs.microsoft.com/en-us/virtualization/api/#windows-hypervisor-platform) +on Windows, and either Microsoft Hypervisor (mshv) or [KVM](https://linux-kvm.org/page/Main_Page) on Linux. -These micro VMs operate without a kernel or operating system, keeping overhead low. Instead, guests are built specifically for Hyperlight using the Hyperlight Guest library, which provides a controlled set of APIs that facilitate interaction between host and guest: +These micro VMs operate without a kernel or operating system, keeping overhead low. Instead, guests are built +specifically for Hyperlight using the Hyperlight Guest library, which provides a controlled set of APIs that facilitate +interaction between host and guest: - The host can call functions implemented and exposed by the guest (known as _guest functions_). - Once running, the guest can call functions implemented and exposed by the host (known as _host functions_). -By default, Hyperlight restricts guest access to a minimal API. The only _host function_ available by default allows the guest to print messages, which are displayed on the host console or redirected to stdout, as configured. Hosts can choose to expose additional host functions, expanding the guest’s capabilities as needed. +By default, Hyperlight restricts guest access to a minimal API. The only _host function_ available by default allows the +guest to print messages, which are displayed on the host console or redirected to stdout, as configured. Hosts can +choose to expose additional host functions, expanding the guest’s capabilities as needed. -Below is an example demonstrating the use of the Hyperlight host library in Rust to execute a simple guest application and an example of a simple guest application using the Hyperlight guest library in also written in Rust. +Below is an example demonstrating the use of the Hyperlight host library in Rust to execute a simple guest application +and an example of a simple guest application using the Hyperlight guest library in also written in Rust. ### Host @@ -130,34 +136,38 @@ pub fn guest_dispatch_function(function_call: FunctionCall) -> Result> { ErrorCode::GuestFunctionNotFound, function_name, )); - } ``` -For additional examples of using the Hyperlight host Rust library, see the [./src/hyperlight_host/examples](./src/hyperlight_host/examples) directory. +For additional examples of using the Hyperlight host Rust library, see +the [./src/hyperlight_host/examples](./src/hyperlight_host/examples) directory. -For examples of guest applications, see the [./src/tests/c_guests](./src/tests/c_guests) directory for C guests and the [./src/tests/rust_guests](./src/tests/rust_guests) directory for Rust guests. +For examples of guest applications, see the [./src/tests/c_guests](./src/tests/c_guests) directory for C guests and +the [./src/tests/rust_guests](./src/tests/rust_guests) directory for Rust guests. > Note: Hyperlight guests can be written using the Hyperlight Rust or C Guest libraries. ## Repository Structure - Hyperlight Host Libraries (i.e., the ones that create and manage the VMs) - - [src/hyperlight_host](./src/hyperlight_host) - This is the Rust Hyperlight host library. + - [src/hyperlight_host](./src/hyperlight_host) - This is the Rust Hyperlight host library. - Hyperlight Guest Libraries (i.e., the ones to make it easier to create guests that run inside the VMs) - - [src/hyperlight_guest](./src/hyperlight_guest) - This is the Rust Hyperlight guest library. - - [src/hyperlight_guest_capi](./src/hyperlight_guest_capi) - This is the C compatible wrapper for the Hyperlight guest library. + - [src/hyperlight_guest](./src/hyperlight_guest) - This is the Rust Hyperlight guest library. + - [src/hyperlight_guest_capi](./src/hyperlight_guest_capi) - This is the C compatible wrapper for the Hyperlight + guest library. - Hyperlight Common (functionality used by both the host and the guest) - - [src/hyperlight_common](./src/hyperlight_common) + - [src/hyperlight_common](./src/hyperlight_common) - Test Guest Applications: - - [src/tests/rust_guests](./src/tests/rust_guests) - This directory contains three Hyperlight Guest programs written in Rust, which are intended to be launched within partitions as "guests". - - [src/tests/c_guests](./src/tests/c_guests) - This directory contains two Hyperlight Guest programs written in C, which are intended to be launched within partitions as "guests". + - [src/tests/rust_guests](./src/tests/rust_guests) - This directory contains three Hyperlight Guest programs written + in Rust, which are intended to be launched within partitions as "guests". + - [src/tests/c_guests](./src/tests/c_guests) - This directory contains two Hyperlight Guest programs written in C, + which are intended to be launched within partitions as "guests". - Tests: - - [src/hyperlight-testing](./src/hyperlight_testing) - Shared testing code for Hyperlight projects built in Rust. + - [src/hyperlight-testing](./src/hyperlight_testing) - Shared testing code for Hyperlight projects built in Rust. ## Try it yourself! @@ -170,10 +180,13 @@ You can run Hyperlight on: After having an environment with a hypervisor setup, running the example has the following pre-requisites: -1. On Linux or WSL, you'll most likely need build essential. For Ubuntu, run `sudo apt install build-essential`. For Azure Linux, run `sudo dnf install build-essential`. -2. [Rust](https://www.rust-lang.org/tools/install). Install toolchain v1.78.0 or later. +1. On Linux or WSL, you'll most likely need build essential. For Ubuntu, run `sudo apt install build-essential`. For + Azure Linux, run `sudo dnf install build-essential`. +2. [Rust](https://www.rust-lang.org/tools/install). Install toolchain v1.78.0 or later. - Also, install the `x86_64-pc-windows-msvc` and `x86_64-unknown-none` targets, these are needed to build the test guest binaries. (Note: install both targets on either Linux or Windows: Hyperlight can load ELF or PE files on either OS, and the tests/examples are built for both): + Also, install the `x86_64-pc-windows-msvc` and `x86_64-unknown-none` targets, these are needed to build the test + guest binaries. (Note: install both targets on either Linux or Windows: Hyperlight can load ELF or PE files on either + OS, and the tests/examples are built for both): ```sh rustup target add x86_64-unknown-none @@ -220,17 +233,21 @@ If all worked as expected, you should see the following message in your console: Hello, World! I am executing inside of a VM :) ``` -If you get the error `Error: NoHypervisorFound` and KVM or mshv is set up then this may be a permissions issue. In bash, you can use `ls -l /dev/kvm` or `ls -l /dev/mshv` to check which group owns that device and then `groups` to make sure your user is a member of that group. +If you get the error `Error: NoHypervisorFound` and KVM or mshv is set up then this may be a permissions issue. In bash, +you can use `ls -l /dev/kvm` or `ls -l /dev/mshv` to check which group owns that device and then `groups` to make sure +your user is a member of that group. -For more details on how to verify that KVM is correctly installed and permissions are correct, follow the guide [here](https://help.ubuntu.com/community/KVM/Installation). +For more details on how to verify that KVM is correctly installed and permissions are correct, follow the +guide [here](https://help.ubuntu.com/community/KVM/Installation). ### Or you can use a codespace - + [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/hyperlight-dev/hyperlight) ## Contributing to Hyperlight -If you are interested in contributing to Hyperlight, running the entire test-suite is a good way to get started. To do so, on your console, run the following commands: +If you are interested in contributing to Hyperlight, running the entire test-suite is a good way to get started. To do +so, on your console, run the following commands: ```sh just guests # build the c and rust test guests @@ -238,9 +255,11 @@ just build # build the Hyperlight library just test # runs the tests ``` -Also , please review the [CONTRIBUTING.md](./CONTRIBUTING.md) file for more information on how to contribute to Hyperlight. +Also , please review the [CONTRIBUTING.md](./CONTRIBUTING.md) file for more information on how to contribute to +Hyperlight. -> Note: For general Hyperlight development, you may also need flatc (Flatbuffer compiler): for instructions, see [here](https://github.com/google/flatbuffers). +> Note: For general Hyperlight development, you may also need flatc (Flatbuffer compiler): for instructions, +> see [here](https://github.com/google/flatbuffers). ## More Information @@ -251,5 +270,7 @@ For more information, please refer to our compilation of documents in the [`docs See the [Code of Conduct](./CODE_OF_CONDUCT.md). [wsl2]: https://docs.microsoft.com/en-us/windows/wsl/install + [kvm]: https://help.ubuntu.com/community/KVM/Installation + [whp]: https://devblogs.microsoft.com/visualstudio/hyper-v-android-emulator-support/#1-enable-hyper-v-and-the-windows-hypervisor-platform From 8cec8c0fc5e91b4588ec9de4c501bae17092b4ec Mon Sep 17 00:00:00 2001 From: Simon Davies Date: Mon, 18 Nov 2024 23:40:44 +0000 Subject: [PATCH 09/17] remove .vscode settings (#66) * remove .vscode settings Signed-off-by: Simon Davies * additional changes and addressing feedback Signed-off-by: Simon Davies * Update .devcontainer/Dockerfile Co-authored-by: Dan Chiarlone Signed-off-by: Simon Davies --------- Signed-off-by: Simon Davies Co-authored-by: Dan Chiarlone --- .devcontainer/Dockerfile | 1 + .devcontainer/devcontainer.json | 7 ++++- .gitignore | 4 --- .vscode/launch.json | 50 --------------------------------- .vscode/settings.json | 23 --------------- CONTRIBUTING.md | 5 ++++ 6 files changed, 12 insertions(+), 78 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/settings.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 0b002dab..fd6aa78f 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -59,5 +59,6 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ && rustup target add x86_64-unknown-linux-gnu \ && rustup target add x86_64-unknown-none \ && rustup target add x86_64-pc-windows-msvc \ + && rustup toolchain add nightly-x86_64-unknown-linux-gnu \ && cargo install just diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d76b2985..ebfed8c5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -27,7 +27,12 @@ "ms-vscode.cmake-tools", "rust-lang.rust-analyzer", "vadimcn.vscode-lldb" - ] + ], + "settings": { + "rust-analyzer.rustfmt.extraArgs": [ + "+nightly" // required for rustfmt.toml which uses nightly features + ] + } } } } diff --git a/.gitignore b/.gitignore index 1e3a4690..11a19ba7 100644 --- a/.gitignore +++ b/.gitignore @@ -448,10 +448,6 @@ $RECYCLE.BIN/ ## Visual Studio Code ## .vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json /downloads diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index a3b24b8c..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "lldb", - "request": "attach", - "name": "Attach LLDB", - "pid": "${command:pickMyProcess}" // use ${command:pickProcess} to pick other users' processes - }, - // Use this to debug a test build with release optimizations - { - "type": "lldb", - "request": "launch", - "name": "Cargo test", - "cargo": { - "args": [ - "test", - "--profile=release-with-debug", - "--lib", - "--no-run", - ], - "filter": { - "name": "hyperlight_host", - "kind": "lib" - } - }, - "args": ["sandbox::initialized_single_use::tests"] - }, - { - "type": "lldb", - "request": "launch", - "name": "Cargo debug integration_test", - "env": {"GUEST": "c"}, - "cargo": { - "args": [ - "test", - "--profile=dev", - "--no-run", - ], - "filter": { - "name": "sandbox_host_tests", - } - }, - "args": ["--exact", "float_roundtrip"] // the specific test to run - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index c32b44eb..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "files.associations": { - "*.h": "c", -}, - "rust-analyzer.showUnlinkedFileNotification": false, - "rust-analyzer.linkedProjects": [ - "Cargo.toml", - "src/hyperlight_host/Cargo.toml", - "src/hyperlight_guest/Cargo.toml", - "src/hyperlight_testing/Cargo.toml", - "src/hyperlight_common/Cargo.toml", - "src/hyperlight_guest_capi/Cargo.toml", - "src/tests/rust_guests/dummyguest/Cargo.toml", - "src/tests/rust_guests/simpleguest/Cargo.toml", - "src/tests/rust_guests/callbackguest/Cargo.toml" - ], - "rust-analyzer.rustfmt.extraArgs": [ - "+nightly" // required for rustfmt.toml which uses nightly features - ], - "githubPullRequests.ignoredPullRequestBranches": [ - "dev" - ] -} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 67a51168..05a16708 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -38,6 +38,7 @@ All contributions come through pull requests. To submit a proposed change, we re #### Use work-in-progress PRs for early feedback A good way to communicate before investing too much time is to create a "Work-in-progress" PR and share it with your reviewers. The standard way of doing this is to add a "[WIP]" prefix in your PR's title and open the pull request as a draft. + ### Developer Certificate of Origin: Signing your work #### Every commit needs to be signed @@ -82,3 +83,7 @@ git push --force-with-lease ``` *Credit: This doc was cribbed from Dapr.* + +### Rust Analyzer + +If you are using the [Rust Analyzer](https://rust-analyzer.github.io/manual.html) then you may need to set the configuration option `rust-analyzer.rustfmt.extraArgs` to `["+nightly"]` to ensure that formatting works correctly as this project has a [`rustfmt.toml`](./rustfmt.toml) file that uses nightly features. From c0ecc5677442a8a52c000bece4206766dddeb250 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 16:16:01 -0500 Subject: [PATCH 10/17] Bump docker/login-action from 1 to 3 (#72) Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v1...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/CreateDevcontainerImage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CreateDevcontainerImage.yml b/.github/workflows/CreateDevcontainerImage.yml index de6fd4cb..66163e6c 100644 --- a/.github/workflows/CreateDevcontainerImage.yml +++ b/.github/workflows/CreateDevcontainerImage.yml @@ -42,7 +42,7 @@ jobs: # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. - name: Log in to the Container registry - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} From f0e4574fb37e75c1b3c452c5dcd36fb0e3d59cce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 16:16:21 -0500 Subject: [PATCH 11/17] Bump actions/checkout from 3 to 4 (#71) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/CreateDevcontainerImage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CreateDevcontainerImage.yml b/.github/workflows/CreateDevcontainerImage.yml index 66163e6c..eb676ed2 100644 --- a/.github/workflows/CreateDevcontainerImage.yml +++ b/.github/workflows/CreateDevcontainerImage.yml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Read Rust toolchain version from ${{ env.RUST_TOOLCHAIN_FILE }} id: toolchain From c824f9203d8a2b244e75bc3d72c3467dd1c424f9 Mon Sep 17 00:00:00 2001 From: David Justice Date: Wed, 20 Nov 2024 07:25:06 -0500 Subject: [PATCH 12/17] create the hyperlight proposal process (#25) Signed-off-by: David Justice Co-authored-by: Dan Chiarlone --- proposals/0000-hip-process/README.md | 38 ++++++ proposals/NNNN-hip-template/README.md | 177 ++++++++++++++++++++++++++ proposals/README.md | 25 ++++ 3 files changed, 240 insertions(+) create mode 100644 proposals/0000-hip-process/README.md create mode 100644 proposals/NNNN-hip-template/README.md create mode 100644 proposals/README.md diff --git a/proposals/0000-hip-process/README.md b/proposals/0000-hip-process/README.md new file mode 100644 index 00000000..7bec13fa --- /dev/null +++ b/proposals/0000-hip-process/README.md @@ -0,0 +1,38 @@ +# Hyperlight Improvement Process + + +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) +- [Proposal](#proposal) + + +## Summary + +Hyperlight Improvement Proposals, otherwise known as HIPs, are largely influenced by the Kubernetes +Enhancement Proposal (KEP) process which provides a standardized development process for Hyperlight +enhancements. You can read more about the +[KEP process in 0000-kep-process here](https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md). + +## Motivation + +### Goals + +1. Since Hyperlight is a smaller project than Kubernetes and has a smaller community of contributors, the +needs are slightly different from that of the Kubernetes project. HIPs do not strive to meet the rigor +of their inspiration in Kubernetes, but rather, to provide a means for communication of intent and a +historical record for the motivations that drove the improvement. + +### Non-goals + +1. To have all changes require a HIP. Only significantly impacting work should be stated as a HIP, e.g. +a large refactoring, significant feature enhancements, breaking APIs, etc. +2. We will omit the use of KEP like metadata that is associated with KEPs. + +## Proposal + +We propose creating a standardized improvement proposal process for Hyperlight modeled after the Kubernetes +Enhancement Proposal process. + + diff --git a/proposals/NNNN-hip-template/README.md b/proposals/NNNN-hip-template/README.md new file mode 100644 index 00000000..b6ca1622 --- /dev/null +++ b/proposals/NNNN-hip-template/README.md @@ -0,0 +1,177 @@ +# HIP NNNN - SKIP NAME + + +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) +- [Proposal](#proposal) + - [User Stories (Optional)](#user-stories-optional) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Notes/Constraints/Caveats (Optional)](#notesconstraintscaveats-optional) + - [Risks and Mitigations](#risks-and-mitigations) +- [Design Details](#design-details) + - [Test Plan](#test-plan) + - [Unit tests](#unit-tests) + - [Integration tests](#integration-tests) + - [e2e tests](#e2e-tests) +- [Implementation History](#implementation-history) +- [Drawbacks](#drawbacks) +- [Alternatives](#alternatives) + + +## Summary + + + +## Motivation + + + +### Goals + + + +### Non-Goals + + + +## Proposal + + + +### User Stories (Optional) + + + +#### Story 1 + +#### Story 2 + +### Notes/Constraints/Caveats (Optional) + + + +### Risks and Mitigations + + + +## Design Details + + + +### Test Plan + + + +##### Unit tests + + + +##### Integration tests + + + +##### e2e tests + + + +## Implementation History + + + +## Drawbacks + + + +## Alternatives + + diff --git a/proposals/README.md b/proposals/README.md new file mode 100644 index 00000000..918bd311 --- /dev/null +++ b/proposals/README.md @@ -0,0 +1,25 @@ +# Hyperlight Improvement Proposals (HIPs) + +Hyperlight Improvement Proposals, otherwise known as HIPs, are largely influenced by the Kubernetes +Enhancement Proposal (KEP) process which provides a standardized development process for Hyperlight +enhancements. You can read more about the +[KEP process in 0000-kep-process here](https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md). + +## Authoring a HIP +When you have a new enhancement that is more than a relatively trivial enhancement or bug fix, the +change should be first socialized as a HIP. To help authors to get started a HIP template is located in +[NNNN-hip-template](./NNNN-hip-template/README.md). + +1. Create a new directory under [the proposals directory](../proposals) in the form of `NNNN-hip-${hip_name}` + where `NNNN` is the next HIP number available. For example, if HIP 0001 is currently the highest number HIP and + your enhancement is titled "Make Me a Sandwich", then your HIP would be `0002-hip-make-me-a-sandwich`. +2. Within your `NNNN-hip-${hip_name}` directory create a file named `README.md` containing a copy of the HIP + template. +3. Author the content of the template. Not all sections are necessary. Please consider filling out the + summary, motivation, and proposal sections first to gather early feedback on the desirability of the + enhancement through a draft pull request. +4. After socializing the proposal and integrating early feedback, continue with the rest of the sections. +5. Update the pull request with the rest of the sections and remove the draft status from the pull request. +6. Address any feedback to the proposal and get it merged. +7. Implement the enhancement. + From 9f0dd13a1310bfb73ae0cf2808783d1a4fab9962 Mon Sep 17 00:00:00 2001 From: Dan Chiarlone Date: Wed, 20 Nov 2024 12:48:45 -0800 Subject: [PATCH 13/17] [github_actions] update PRLabelChecker workflow to pull new labels (#77) Signed-off-by: danbugs --- .github/workflows/PRLabelChecker.yml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/PRLabelChecker.yml b/.github/workflows/PRLabelChecker.yml index 273b6b9b..c6fb3363 100644 --- a/.github/workflows/PRLabelChecker.yml +++ b/.github/workflows/PRLabelChecker.yml @@ -14,16 +14,22 @@ jobs: - uses: actions/checkout@v4 - name: Check for specific labels run: | - PR_NUMBER=$(echo ${{ github.event.pull_request.number }}) - LABELS_JSON=$(gh pr view $PR_NUMBER --json labels -q '.labels.[] | .name') - REQUIRED_LABELS=("chore" "ignore" "breaking-change" "enhancement" "feature" "dependencies" "bug" "security" "performance" "refactor" "testing" "documentation" "github-actions") - for REQUIRED_LABEL in "${REQUIRED_LABELS[@]}"; do - if echo "$LABELS_JSON" | grep -q "$REQUIRED_LABEL"; then - echo "One of the required labels is present" + # Fetch repository labels from the GitHub API + REPO_LABELS=$(gh api repos/${{ github.repository }}/labels --jq '.[].name') + + # Fetch labels applied to the current PR + PR_NUMBER=${{ github.event.pull_request.number }} + PR_LABELS=$(gh pr view $PR_NUMBER --json labels -q '.labels.[] | .name') + + # Check if any PR label matches a repository label + for PR_LABEL in $PR_LABELS; do + if echo "$REPO_LABELS" | grep -qw "$PR_LABEL"; then + echo "Label '$PR_LABEL' matches a repository label." exit 0 fi done - echo "None of the required labels are present" + + echo "None of the PR labels match repository labels." exit 1 env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 8d0cb8030e4832438f3b35276d34cd04ea0e4a81 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg Date: Wed, 20 Nov 2024 13:32:37 -0800 Subject: [PATCH 14/17] Fix 'download benchmark' workflow (#74) Signed-off-by: Ludvig Liljenberg --- .github/workflows/Benchmarks.yml | 16 +++------ .github/workflows/dep_rust.yml | 56 +++++++++++++++----------------- 2 files changed, 30 insertions(+), 42 deletions(-) diff --git a/.github/workflows/Benchmarks.yml b/.github/workflows/Benchmarks.yml index 41bfb26b..f169316a 100644 --- a/.github/workflows/Benchmarks.yml +++ b/.github/workflows/Benchmarks.yml @@ -17,14 +17,6 @@ jobs: strategy: fail-fast: true matrix: - build: [ - windows-2022-release-amd, - linux-kvm-release-amd, - linux-hyperv-release-amd, - windows-2022-release-intel, - linux-kvm-release-intel, - linux-hyperv-release-intel, - ] include: - build: windows-2022-release-amd os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-amd"] @@ -34,9 +26,9 @@ jobs: os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-amd"] hypervisor: kvm arch: amd - - build: linux-hyperv-release-amd + - build: linux-mshv-release-amd os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-amd"] - hypervisor: hyperv + hypervisor: mshv arch: amd - build: windows-2022-release-intel os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-intel"] @@ -46,9 +38,9 @@ jobs: os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-intel"] hypervisor: kvm arch: intel - - build: linux-hyperv-release-intel + - build: linux-mshv-release-intel os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-intel"] - hypervisor: hyperv + hypervisor: mshv arch: intel runs-on: ${{ matrix.os }} diff --git a/.github/workflows/dep_rust.yml b/.github/workflows/dep_rust.yml index 87a9d3cd..82012602 100644 --- a/.github/workflows/dep_rust.yml +++ b/.github/workflows/dep_rust.yml @@ -26,70 +26,66 @@ jobs: strategy: fail-fast: true matrix: - build: - [ - windows-2022-debug-amd, - linux-kvm-debug-amd, - linux-hyperv-debug-amd, - windows-2022-release-amd, - linux-kvm-release-amd, - linux-hyperv-release-amd, - windows-2022-debug-intel, - linux-kvm-debug-intel, - linux-hyperv-debug-intel, - windows-2022-release-intel, - linux-kvm-release-intel, - linux-hyperv-release-intel, - ] include: - build: windows-2022-debug-amd os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-amd"] - hypervisor: none + hypervisor: hyperv config: debug + arch: amd - build: linux-kvm-debug-amd os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-amd"] hypervisor: kvm config: debug - - build: linux-hyperv-debug-amd + arch: amd + - build: linux-mshv-debug-amd os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-amd"] - hypervisor: hyperv + hypervisor: mshv config: debug + arch: amd - build: windows-2022-release-amd os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-amd"] - hypervisor: none + hypervisor: hyperv config: release + arch: amd - build: linux-kvm-release-amd os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-amd"] hypervisor: kvm config: release - - build: linux-hyperv-release-amd + arch: amd + - build: linux-mshv-release-amd os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-amd"] - hypervisor: hyperv + hypervisor: mshv config: release - build: windows-2022-debug-intel os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-intel"] - hypervisor: none + hypervisor: hyperv config: debug + arch: intel - build: linux-kvm-debug-intel os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-intel"] hypervisor: kvm config: debug - - build: linux-hyperv-debug-intel + arch: intel + - build: linux-mshv-debug-intel os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-intel"] - hypervisor: hyperv + hypervisor: mshv config: debug + arch: intel - build: windows-2022-release-intel os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-intel"] - hypervisor: none + hypervisor: hyperv config: release + arch: intel - build: linux-kvm-release-intel os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-intel"] hypervisor: kvm config: release - - build: linux-hyperv-release-intel + arch: intel + - build: linux-mshv-release-intel os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-intel"] - hypervisor: hyperv + hypervisor: mshv config: release + arch: intel runs-on: ${{ matrix.os }} steps: @@ -133,7 +129,7 @@ jobs: just test-rust ${{ matrix.config }} # with only one driver enabled (driver mshv/kvm feature is ignored on windows) + seccomp + inprocess - just test-rust ${{ matrix.config }} inprocess,seccomp,${{ matrix.hypervisor == 'hyperv' && 'mshv' || 'kvm' }} + just test-rust ${{ matrix.config }} inprocess,seccomp,${{ matrix.hypervisor == 'mshv' && 'mshv' || 'kvm' }} # without any driver (shouldn't compile) just test-rust-feature-compilation-fail ${{ matrix.config }} @@ -155,7 +151,7 @@ jobs: ### Benchmarks ### - name: Install github-cli (Linux mariner) - if: runner.os == 'Linux' && matrix.hypervisor == 'hyperv' + if: runner.os == 'Linux' && matrix.hypervisor == 'mshv' run: sudo dnf install gh -y - name: Install github-cli (Linux ubuntu) @@ -163,7 +159,7 @@ jobs: run: sudo apt install gh -y - name: Download benchmarks from "latest" - run: just bench-download ${{ runner.os }} ${{ matrix.hypervisor }} dev-latest # compare to prerelease + run: just bench-download ${{ runner.os }} ${{ matrix.hypervisor }} ${{ matrix.arch}} dev-latest # compare to prerelease env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} continue-on-error: true From a16529394dc6b232e5a872b14fd049e31772a4a0 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg Date: Wed, 20 Nov 2024 23:56:27 -0800 Subject: [PATCH 15/17] Avoid eagerly doing unnecessary string formatting (#73) * Avoid eager unnecessary strin formatting Signed-off-by: Ludvig Liljenberg * Add forgotten amd tag Signed-off-by: Ludvig Liljenberg --------- Signed-off-by: Ludvig Liljenberg --- .github/workflows/dep_rust.yml | 1 + src/hyperlight_host/src/mem/elf.rs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dep_rust.yml b/.github/workflows/dep_rust.yml index 82012602..1abc7273 100644 --- a/.github/workflows/dep_rust.yml +++ b/.github/workflows/dep_rust.yml @@ -56,6 +56,7 @@ jobs: os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-amd"] hypervisor: mshv config: release + arch: amd - build: windows-2022-debug-intel os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-intel"] hypervisor: hyperv diff --git a/src/hyperlight_host/src/mem/elf.rs b/src/hyperlight_host/src/mem/elf.rs index 70a277ba..ec191832 100644 --- a/src/hyperlight_host/src/mem/elf.rs +++ b/src/hyperlight_host/src/mem/elf.rs @@ -78,7 +78,10 @@ impl ElfInfo { .copy_from_slice(&self.payload[payload_offset..payload_offset + payload_len]); target[start_va + payload_len..start_va + phdr.p_memsz as usize].fill(0); } - let get_addend = |name, r: &Reloc| r.r_addend.ok_or(new_error!("{} missing addend", name)); + let get_addend = |name, r: &Reloc| { + r.r_addend + .ok_or_else(|| new_error!("{} missing addend", name)) + }; for r in self.relocs.iter() { #[cfg(target_arch = "aarch64")] match r.r_type { From 30eb878a4b181a9318f62ec065b829d8422ca126 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg Date: Thu, 21 Nov 2024 13:41:55 -0800 Subject: [PATCH 16/17] Simplify ci matrix (#78) Signed-off-by: Ludvig Liljenberg --- .github/workflows/Benchmarks.yml | 35 ++++------------ .github/workflows/dep_rust.yml | 70 +++----------------------------- Justfile | 10 ++--- 3 files changed, 18 insertions(+), 97 deletions(-) diff --git a/.github/workflows/Benchmarks.yml b/.github/workflows/Benchmarks.yml index f169316a..c2665370 100644 --- a/.github/workflows/Benchmarks.yml +++ b/.github/workflows/Benchmarks.yml @@ -17,33 +17,12 @@ jobs: strategy: fail-fast: true matrix: - include: - - build: windows-2022-release-amd - os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-amd"] - hypervisor: hyperv - arch: amd - - build: linux-kvm-release-amd - os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-amd"] - hypervisor: kvm - arch: amd - - build: linux-mshv-release-amd - os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-amd"] - hypervisor: mshv - arch: amd - - build: windows-2022-release-intel - os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-intel"] - hypervisor: hyperv - arch: intel - - build: linux-kvm-release-intel - os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-intel"] - hypervisor: kvm - arch: intel - - build: linux-mshv-release-intel - os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-intel"] - hypervisor: mshv - arch: intel + hypervisor: [hyperv, mshv, kvm] # hyperv is windows, mshv and kvm are linux + cpu: [amd, intel] + config: [release] # don't want to benchmark debug-builds - runs-on: ${{ matrix.os }} + runs-on: ${{ fromJson(format('["self-hosted", "{0}", "X64", "1ES.Pool=hld-{1}-{2}"]', matrix.hypervisor == 'hyperv' && 'Windows' || 'Linux', matrix.hypervisor == 'hyperv' && 'win2022' || matrix.hypervisor, matrix.cpu)) }} + steps: ### Setup ### @@ -82,7 +61,7 @@ jobs: run: git fetch --tags origin - name: Download benchmarks from most recent release - run: just bench-download ${{ runner.os }} ${{ matrix.hypervisor }} ${{ matrix.arch }} # skip tag parameter to compare to latest stable release + run: just bench-download ${{ runner.os }} ${{ matrix.hypervisor }} ${{ matrix.cpu }} # skip tag parameter to compare to latest stable release continue-on-error: true env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -92,6 +71,6 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: benchmarks_${{runner.os}}_${{matrix.hypervisor}}_${{ matrix.arch }} + name: benchmarks_${{runner.os}}_${{matrix.hypervisor}}_${{ matrix.cpu }} path: ./target/criterion/ if-no-files-found: error diff --git a/.github/workflows/dep_rust.yml b/.github/workflows/dep_rust.yml index 1abc7273..079373db 100644 --- a/.github/workflows/dep_rust.yml +++ b/.github/workflows/dep_rust.yml @@ -26,69 +26,11 @@ jobs: strategy: fail-fast: true matrix: - include: - - build: windows-2022-debug-amd - os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-amd"] - hypervisor: hyperv - config: debug - arch: amd - - build: linux-kvm-debug-amd - os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-amd"] - hypervisor: kvm - config: debug - arch: amd - - build: linux-mshv-debug-amd - os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-amd"] - hypervisor: mshv - config: debug - arch: amd - - build: windows-2022-release-amd - os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-amd"] - hypervisor: hyperv - config: release - arch: amd - - build: linux-kvm-release-amd - os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-amd"] - hypervisor: kvm - config: release - arch: amd - - build: linux-mshv-release-amd - os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-amd"] - hypervisor: mshv - config: release - arch: amd - - build: windows-2022-debug-intel - os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-intel"] - hypervisor: hyperv - config: debug - arch: intel - - build: linux-kvm-debug-intel - os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-intel"] - hypervisor: kvm - config: debug - arch: intel - - build: linux-mshv-debug-intel - os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-intel"] - hypervisor: mshv - config: debug - arch: intel - - build: windows-2022-release-intel - os: [self-hosted, Windows, X64, "1ES.Pool=hld-win2022-intel"] - hypervisor: hyperv - config: release - arch: intel - - build: linux-kvm-release-intel - os: [self-hosted, Linux, X64, "1ES.Pool=hld-kvm-intel"] - hypervisor: kvm - config: release - arch: intel - - build: linux-mshv-release-intel - os: [self-hosted, Linux, X64, "1ES.Pool=hld-mshv-intel"] - hypervisor: mshv - config: release - arch: intel - - runs-on: ${{ matrix.os }} + hypervisor: [hyperv, mshv, kvm] # hyperv is windows, mshv and kvm are linux + cpu: [amd, intel] + config: [debug, release] + + runs-on: ${{ fromJson(format('["self-hosted", "{0}", "X64", "1ES.Pool=hld-{1}-{2}"]', matrix.hypervisor == 'hyperv' && 'Windows' || 'Linux', matrix.hypervisor == 'hyperv' && 'win2022' || matrix.hypervisor, matrix.cpu)) }} steps: - uses: actions/checkout@v4 @@ -160,7 +102,7 @@ jobs: run: sudo apt install gh -y - name: Download benchmarks from "latest" - run: just bench-download ${{ runner.os }} ${{ matrix.hypervisor }} ${{ matrix.arch}} dev-latest # compare to prerelease + run: just bench-download ${{ runner.os }} ${{ matrix.hypervisor }} ${{ matrix.cpu}} dev-latest # compare to prerelease env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} continue-on-error: true diff --git a/Justfile b/Justfile index 15544bdf..ff655b9e 100644 --- a/Justfile +++ b/Justfile @@ -165,13 +165,13 @@ run-rust-examples-linux target=default-target: (build-rust target) (run-rust-exa # Downloads the benchmarks result from the given release tag. # If tag is not given, defaults to latest release # Options for os: "Windows", or "Linux" -# Options for Linux hypervisor: "kvm", "hyperv" +# Options for Linux hypervisor: "kvm", "mshv" # Options for Windows hypervisor: "hyperv" -# Options for arch: "amd", "intel" -bench-download os hypervisor arch tag="": - gh release download {{ tag }} -D ./target/ -p benchmarks_{{ os }}_{{ hypervisor }}_{{ arch }}.tar.gz +# Options for cpu: "amd", "intel" +bench-download os hypervisor cpu tag="": + gh release download {{ tag }} -D ./target/ -p benchmarks_{{ os }}_{{ hypervisor }}_{{ cpu }}.tar.gz mkdir -p target/criterion {{ if os() == "windows" { "-Force" } else { "" } }} - tar -zxvf target/benchmarks_{{ os }}_{{ hypervisor }}_{{ arch }}.tar.gz -C target/criterion/ --strip-components=1 + tar -zxvf target/benchmarks_{{ os }}_{{ hypervisor }}_{{ cpu }}.tar.gz -C target/criterion/ --strip-components=1 # Warning: compares to and then OVERWRITES the given baseline bench-ci baseline target=default-target: From 6d4c3a8fec9602af3e336b44f826c21854341260 Mon Sep 17 00:00:00 2001 From: Ludvig Liljenberg Date: Thu, 21 Nov 2024 21:32:16 -0800 Subject: [PATCH 17/17] Cancel in-progress jobs for new pushes (#79) Signed-off-by: Ludvig Liljenberg --- .github/workflows/ValidatePullRequest.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ValidatePullRequest.yml b/.github/workflows/ValidatePullRequest.yml index ce352a46..975c8a6d 100644 --- a/.github/workflows/ValidatePullRequest.yml +++ b/.github/workflows/ValidatePullRequest.yml @@ -7,6 +7,12 @@ on: branches: [main, "release/**"] merge_group: +# Cancels old running job if a new one is triggered (e.g. by a push onto the same branch). +# This will cancel dependent jobs as well, such as dep_rust and dep_fuzzing +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + permissions: id-token: write contents: read @@ -42,6 +48,7 @@ jobs: secrets: inherit with: docs_only: ${{needs.docs-pr.outputs.docs-only}} + fuzzing: needs: - docs-pr @@ -50,6 +57,7 @@ jobs: max_total_time: 300 # 5 minutes in seconds docs_only: ${{needs.docs-pr.outputs.docs-only}} secrets: inherit + spelling: name: spell check with typos runs-on: ubuntu-latest