From 2c0de7a8ea8b099ce413c28fb509d52b970927f0 Mon Sep 17 00:00:00 2001 From: Simon Scatton Date: Mon, 26 Oct 2026 13:44:41 +0100 Subject: [PATCH 1/4] fix(deps): update tokio and crypto-bigint security patches Signed-off-by: Simon Scatton --- Cargo.lock | 26 +++++++++---------- e2e/rust/Cargo.lock | 4 +-- examples/governance-interceptor/Cargo.lock | 4 +-- .../Cargo.lock | 4 +-- tests/suites/conformance/Cargo.lock | 4 +-- tests/suites/drivers/Cargo.lock | 4 +-- tests/suites/features/Cargo.lock | 4 +-- tests/testkit/Cargo.lock | 4 +-- tests/tmachine/Cargo.lock | 4 +-- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ed9b67d66..2fe8446407 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1425,9 +1425,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.7.5" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a52aa3fcda4e6302a9f48734f234d35d4721b96f8fe07d073f07ce9df4f0271" +checksum = "9c035cb64cba03dad2fb921f3e218785e8cf9a41790da5eb3a1400f62fa2be11" dependencies = [ "cpubits", "ctutils", @@ -1467,7 +1467,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3633a51a39c69ebbaa4feaa694bd83d241e4093901c84a0963b19d9bb3f0cf8f" dependencies = [ - "crypto-bigint 0.7.5", + "crypto-bigint 0.7.10", "rand_core 0.10.1", ] @@ -1492,9 +1492,9 @@ dependencies = [ [[package]] name = "ctutils" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12218662ccac37d9714f2191252553d67585b97df8c839cbe49e0bde278dc865" +checksum = "fe3e9d21d39e6f39ff46e03d5b621424f88ee23d8a1672c6bfc9ccc7f2da4f6a" dependencies = [ "cmov", "subtle", @@ -1999,7 +1999,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct 1.0.0", - "crypto-bigint 0.7.5", + "crypto-bigint 0.7.10", "crypto-common 0.2.2", "digest 0.11.2", "ff 0.14.0", @@ -5949,7 +5949,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" dependencies = [ - "crypto-bigint 0.7.5", + "crypto-bigint 0.7.10", "crypto-common 0.2.2", "ff 0.14.0", "rand_core 0.10.1", @@ -6631,7 +6631,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" dependencies = [ - "crypto-bigint 0.7.5", + "crypto-bigint 0.7.10", "hmac 0.13.0", ] @@ -6688,7 +6688,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30b2aa4ba0d89f73d1e332df05be0eeab8840351c36ca5654341dfdb57bb3caf" dependencies = [ "const-oid 0.10.2", - "crypto-bigint 0.7.5", + "crypto-bigint 0.7.10", "crypto-primes", "digest 0.11.2", "pkcs1 0.8.0-rc.4", @@ -6714,7 +6714,7 @@ dependencies = [ "bytes", "cbc", "cipher", - "crypto-bigint 0.7.5", + "crypto-bigint 0.7.10", "ctr", "curve25519-dalek 5.0.0", "data-encoding", @@ -7738,7 +7738,7 @@ checksum = "7b54d0ed0498daf3f78d82e00e28c8eec9d75a067c4cfbcc7a0f7d0f4077749e" dependencies = [ "base64ct", "bytes", - "crypto-bigint 0.7.5", + "crypto-bigint 0.7.10", "ctutils", "digest 0.11.2", "pem-rfc7468 1.0.0", @@ -8196,9 +8196,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/e2e/rust/Cargo.lock b/e2e/rust/Cargo.lock index a7e5f7e7f3..1424f21769 100644 --- a/e2e/rust/Cargo.lock +++ b/e2e/rust/Cargo.lock @@ -2836,9 +2836,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/examples/governance-interceptor/Cargo.lock b/examples/governance-interceptor/Cargo.lock index bb73247bb3..11a44da025 100644 --- a/examples/governance-interceptor/Cargo.lock +++ b/examples/governance-interceptor/Cargo.lock @@ -3226,9 +3226,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/examples/supervisor-middleware-content-guard/Cargo.lock b/examples/supervisor-middleware-content-guard/Cargo.lock index 1e7d1a030a..cf2c9ed99d 100644 --- a/examples/supervisor-middleware-content-guard/Cargo.lock +++ b/examples/supervisor-middleware-content-guard/Cargo.lock @@ -3351,9 +3351,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/tests/suites/conformance/Cargo.lock b/tests/suites/conformance/Cargo.lock index 89d8c0d392..43b325d8b3 100644 --- a/tests/suites/conformance/Cargo.lock +++ b/tests/suites/conformance/Cargo.lock @@ -342,9 +342,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/tests/suites/drivers/Cargo.lock b/tests/suites/drivers/Cargo.lock index 6b013452fe..5654347dad 100644 --- a/tests/suites/drivers/Cargo.lock +++ b/tests/suites/drivers/Cargo.lock @@ -343,9 +343,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/tests/suites/features/Cargo.lock b/tests/suites/features/Cargo.lock index 24b386a25c..4df49073a1 100644 --- a/tests/suites/features/Cargo.lock +++ b/tests/suites/features/Cargo.lock @@ -2854,9 +2854,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/tests/testkit/Cargo.lock b/tests/testkit/Cargo.lock index 9375647f18..3cd07a667e 100644 --- a/tests/testkit/Cargo.lock +++ b/tests/testkit/Cargo.lock @@ -3339,9 +3339,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67dee974fe86fd92cc45b7a95fdd2f99a36a6d7b0d431a231178d3d670bbcc6" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", diff --git a/tests/tmachine/Cargo.lock b/tests/tmachine/Cargo.lock index 9116e42ee8..905b0dfa08 100644 --- a/tests/tmachine/Cargo.lock +++ b/tests/tmachine/Cargo.lock @@ -587,9 +587,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.1" +version = "1.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" +checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e" dependencies = [ "bytes", "libc", From 0d9dedaca60fa95bac25c4a42676389a9de0a6e2 Mon Sep 17 00:00:00 2001 From: Simon Scatton Date: Mon, 26 Oct 2026 13:46:24 +0100 Subject: [PATCH 2/4] chore(deps): document temporary crypto-bigint advisory exception Signed-off-by: Simon Scatton --- deny.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deny.toml b/deny.toml index 16be75953e..5251ac668d 100644 --- a/deny.toml +++ b/deny.toml @@ -21,6 +21,10 @@ ignore = [ { id = "RUSTSEC-2026-0204", reason = "crossbeam-epoch pointer deref — transitive via metrics/quanta" }, { id = "RUSTSEC-2023-0071", reason = "rsa Marvin attack — transitive via spiffe, no direct exposure" }, { id = "RUSTSEC-2025-0134", reason = "rustls-pemfile unmaintained — transitive via older kube/hyper" }, + # SPIFFE's jsonwebtoken RustCrypto stack still requires crypto-bigint 0.5. + # Remove after compatible upstream releases include the dependency upgrade: + # https://github.com/Keats/jsonwebtoken/pull/536 + { id = "RUSTSEC-2026-0387", reason = "crypto-bigint 0.5.5 timing variability — transitive via SPIFFE/jsonwebtoken; remove when the dependency chain supports crypto-bigint >=0.7.6" }, # zip is used only by z3-sys's build script with prebuilt-z3 enabled to # extract upstream Z3 GitHub release assets, never runtime/user archives. # Accept the build-time risk of a compromised upstream release asset until From 84148fbdad73dfe8d72bb331c3c1754d4e60ea7a Mon Sep 17 00:00:00 2001 From: Simon Scatton Date: Mon, 26 Oct 2026 14:08:28 +0100 Subject: [PATCH 3/4] fix(sandbox): migrate owned descriptors to AsyncFd register Signed-off-by: Simon Scatton --- Cargo.toml | 2 +- crates/openshell-sandbox-backend/src/lib.rs | 2 +- crates/openshell-sandbox-backend/src/runtime_initiated.rs | 6 +++++- crates/openshell-sandbox/src/main_session.rs | 7 ++++++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 905065d843..c84ae312f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ repository = "https://github.com/NVIDIA/OpenShell" # Product backend selection. Consumer crates inherit this choice. openshell-crypto = { path = "crates/openshell-crypto", default-features = false, features = ["aws-lc"] } # Async runtime -tokio = { version = "1.43", features = ["full"] } +tokio = { version = "1.53.3", features = ["full"] } # gRPC/Protobuf tonic = "0.14" diff --git a/crates/openshell-sandbox-backend/src/lib.rs b/crates/openshell-sandbox-backend/src/lib.rs index 6e1bc80872..a236bbd67a 100644 --- a/crates/openshell-sandbox-backend/src/lib.rs +++ b/crates/openshell-sandbox-backend/src/lib.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 -#![forbid(unsafe_code)] +#![deny(unsafe_code)] //! Concrete supervisor-side client for the Isolation Backend and Sandbox Protocol RPCs. //! diff --git a/crates/openshell-sandbox-backend/src/runtime_initiated.rs b/crates/openshell-sandbox-backend/src/runtime_initiated.rs index 8f2bf94e2c..8599c06eb9 100644 --- a/crates/openshell-sandbox-backend/src/runtime_initiated.rs +++ b/crates/openshell-sandbox-backend/src/runtime_initiated.rs @@ -255,8 +255,12 @@ impl Listener { socket.set_nonblocking(true)?; socket.bind(&socket2::SockAddr::vsock(libc::VMADDR_CID_ANY, port))?; socket.listen(64)?; + // SAFETY: `socket` owns a valid descriptor and is moved into AsyncFd. + // The descriptor is never closed or replaced while registered. + #[allow(unsafe_code)] + let listener = unsafe { tokio::io::unix::AsyncFd::register(socket)? }; Ok(Self::Vsock { - listener: tokio::io::unix::AsyncFd::new(socket)?, + listener, guest_cid, }) } diff --git a/crates/openshell-sandbox/src/main_session.rs b/crates/openshell-sandbox/src/main_session.rs index 08872c5aad..9e3ae59271 100644 --- a/crates/openshell-sandbox/src/main_session.rs +++ b/crates/openshell-sandbox/src/main_session.rs @@ -560,7 +560,12 @@ impl MainSession { ) { match io { ProcessIo::Pty(master) => { - let master = Arc::new(AsyncFd::new(master).expect("register canonical PTY master")); + // SAFETY: `master` owns a valid PTY descriptor and is moved into AsyncFd. + // The descriptor is never closed or replaced while registered. + #[allow(unsafe_code)] + let master = + unsafe { AsyncFd::register(master) }.expect("register canonical PTY master"); + let master = Arc::new(master); let reader = Arc::clone(&master); let output = Arc::clone(this); tokio::spawn(async move { From c61f4f159757ddd24a8def8a153a2a3f1c33557d Mon Sep 17 00:00:00 2001 From: Simon Scatton Date: Mon, 26 Oct 2026 14:30:44 +0100 Subject: [PATCH 4/4] test(server): avoid deadlock in concurrent CAS retry test Signed-off-by: Simon Scatton --- crates/openshell-server/src/grpc/sandbox.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/openshell-server/src/grpc/sandbox.rs b/crates/openshell-server/src/grpc/sandbox.rs index cac481b149..75baeea81b 100644 --- a/crates/openshell-server/src/grpc/sandbox.rs +++ b/crates/openshell-server/src/grpc/sandbox.rs @@ -9378,7 +9378,8 @@ mod tests { update_sandbox_cas(&state, &sandbox_id, 0, |sandbox| { if first_attempt { first_attempt = false; - barrier.wait(); + // Hand off queued work so SQLx can return the connection to other writers. + tokio::task::block_in_place(|| barrier.wait()); } let annotations = &mut sandbox.metadata.as_mut().unwrap().annotations; let count = annotations