Repository navigation
fix(deps): update aws-smithy-json to 0.62.7 and raise the minimum Rust version to 1.91.1 - #857
Open
LeeroyHannigan wants to merge 11 commits into
Open
LeeroyHannigan wants to merge 11 commits into
LeeroyHannigan wants to merge 11 commits into
Conversation
Cargo.lock: aws-smithy-json moves from 0.62.3 to 0.62.7. Versions up to 0.62.6 recurse without a depth limit while skipping an unknown key, so a deeply nested document can exhaust the stack (CVE-2026-18140, GHSA-8ffr-xgwf-xj56). In this workspace only the AWS SDK clients behind extenddb-backup-store (aws-config, aws-sdk-s3, aws-sdk-sso, aws-sdk-ssooidc, aws-sdk-sts) use the crate, to parse the responses of the S3, STS and SSO endpoints the operator configures. 0.62.7 requires aws-smithy-runtime-api 1.12.3 or newer, so the lock also moves aws-smithy-runtime-api from 1.11.3 to 1.12.3, aws-smithy-types from 1.4.3 to 1.4.9 and aws-smithy-async from 1.2.11 to 1.2.14, and adds aws-smithy-runtime-api-macros 1.0.0 and aws-smithy-schema 0.1.0. Each is the lowest version the new requirements accept. No other package moves, and each aws-smithy crate resolves to one version. The six crates declare rustc 1.91.1 as their minimum, above the workspace rust-version of 1.88, so a 1.88 toolchain refuses to build extenddb-backup-store with this lock. The release images build only the extenddb binary, which does not depend on extenddb-backup-store, so they are unaffected.
aws-smithy-json 0.62.7, the first release with the fix for CVE-2026-18140, and the five aws-smithy crates it needs declare rustc 1.91.1 as their minimum. The workspace minimum was 1.88. Cargo.toml sets rust-version to 1.91.1. The comment on the aws-sdk pins now says that each pinned version declares a minimum at or below the workspace rust-version, and .cargo/config.toml names 1.91.1 for the resolver fallback. The comments next to the two compare-exchange loops that stand in for fetch_update now name 1.91.1: the replacement, try_update, is still unstable there. clippy reads the minimum from rust-version, and from 1.91 it asks for Duration::from_mins where a value is a whole number of minutes. The three cases are in extenddb-cache: the default TTL in swr.rs and two lines of tests.rs now use Duration::from_mins(1).
The workspace rust-version is 1.91.1, so the leg that checks the minimum moves from 1.88.0 to 1.91.1.
README.md, CONTRIBUTING.md, the getting started page, the quick start and install manuals and the backup design name 1.91.1, the workspace rust-version.
The four Dockerfiles build on rust:1.91.1-bookworm, pinned by digest. Cargo refuses to build a package on a compiler older than its rust-version, so the 1.88 build stage would fail on every image.
AGENTS.md and the setup references under .agents/skills name 1.91.1, the workspace rust-version.
LeeroyHannigan
requested review from
amrith,
c33howard,
eliseong,
hitesh96db,
jcshepherd,
navareamol,
pdf-amzn and
robinnsc
as code owners
November 5, 2026 16:08
Since #672 the server links the AWS SDK clients, so the four notices files list the aws-smithy crates. They listed the versions from before this branch's lock update. The files now list aws-smithy-json 0.62.7, aws-smithy-runtime-api 1.12.3, aws-smithy-types 1.4.9 and aws-smithy-async 1.2.14, and add aws-smithy-runtime-api-macros 1.0.0 and aws-smithy-schema 0.1.0. devtools/generate-software-license-notices for the postgres, mongodb and cassandra backends and devtools/generate-dev-license-notices wrote the files with cargo-about 0.9.0, the version CI pins. Each script passes with --check.
A backup test merged from main says that the replacement for fetch_update is not on Rust 1.88. The workspace minimum is now 1.91.1, so the comment names 1.91.1, as the two migration comments on this branch do.
The example Dockerfile in the deployment guide says to match rust-version in Cargo.toml, and builds on rust:1.95. rust-version is now 1.91.1, so the example builds on 1.91.1. The rust image tags without a suffix are the Debian trixie images, and the example's runtime stage is debian:bookworm-slim. A binary linked against glibc 2.41 on trixie can need symbols that glibc 2.36 on bookworm does not have. The example now builds on the bookworm image, as the four Dockerfiles do.
The comments on three compare-exchange loops say that the replacement for fetch_update does not exist on Rust 1.91.1, or is not on it. It exists there as an unstable API, behind the atomic_try_update feature, so the comments now say that it is unstable on 1.91.1.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Cargo.lockmovesaws-smithy-jsonfrom 0.62.3 to 0.62.7, the first version with the fix for Dependabot alert 19. The minimum Rust version of the workspace moves from 1.88 to 1.91.1, because 0.62.7 needs it.The lock
0.62.7 requires
aws-smithy-runtime-api1.12.3 or newer, so the lock also movesaws-smithy-runtime-apifrom 1.11.3 to 1.12.3,aws-smithy-typesfrom 1.4.3 to 1.4.9 andaws-smithy-asyncfrom 1.2.11 to 1.2.14. It addsaws-smithy-runtime-api-macros1.0.0 andaws-smithy-schema0.1.0. Each is the lowest version the new requirements accept. No other package moves. Eachaws-smithycrate resolves to one version.In this workspace only the AWS SDK clients behind
extenddb-backup-storeuseaws-smithy-json:aws-config,aws-sdk-s3,aws-sdk-sso,aws-sdk-ssooidcandaws-sdk-sts. The server creates these clients only when[backup.store]setskind = "s3". Each client parses these inputs with it:aws-sdk-s3andaws-sdk-sts: the endpoint partition table only. Each SDK has the table compiled in, unlessSMITHY_CLIENT_SDK_CUSTOM_PARTITIONnames a file. S3 and STS responses are XML.aws-sdk-ssoandaws-sdk-ssooidc: the partition table, and the responses of the SSO and SSO OIDC endpoints.aws-config: the credentials it reads from IMDS, the container credentials endpoint, acredential_processcommand and the SSO token cache file.No request to the ExtendDB server reaches
aws-smithy-json. Outside tests,crates/backup-store/src/s3.rsis the only file that names an AWS SDK crate, and the DynamoDB API, the admin API and the console parse requests withserde_json. The lock fortests/rustalready has 0.62.7.Since #672 the server links the AWS SDK clients, so the four license notices files list the
aws-smithycrates. They now list the new versions.The minimum Rust version
Four of the six crates declare rustc 1.91.1 as their minimum:
aws-smithy-json0.62.7,aws-smithy-runtime-api1.12.3,aws-smithy-types1.4.9 andaws-smithy-async1.2.14.aws-smithy-runtime-api-macros1.0.0 declares 1.91.0, andaws-smithy-schema0.1.0 declares 1.91. Every fixed version ofaws-smithy-jsondeclares 1.91.1 or higher: 0.62.7 declares 1.91.1, and 0.63.x and 0.65.x declare 1.94.1. The minimum version commits raise the workspace minimum to match:Cargo.tomlsetsrust-versionto 1.91.1. The comment on the aws-sdk pins now says that each pinned version declares a minimum at or below the workspacerust-version.test.ymlruns on 1.91.1..cargo/config.tomlnames 1.91.1 for the resolver fallback.rust:1.91.1-bookworm, pinned by digest. Cargo refuses to build a package on a compiler older than itsrust-version, so the 1.88 build stage would fail on every image.README.md,CONTRIBUTING.md,AGENTS.md, the getting started page, the quick start and install manuals, the backup design and the setup references name 1.91.1.rust:1.91.1-bookworm. It said to matchrust-versionand built onrust:1.95. Therusttags without a suffix are the Debian trixie images, and the example's runtime stage isdebian:bookworm-slim. The example now uses the bookworm image, as the four Dockerfiles do.try_update, the replacement forfetch_update, is still unstable.rust-version, and from 1.91 it asks forDuration::from_minswhere a value is a whole number of minutes. The lint is inclippy::pedantic, which onlyextenddb-cacheenables. The three cases are inextenddb-cache: the default TTL inswr.rsand two lines oftests.rsnow useDuration::from_mins(1).The release images change compiler, from 1.88 to 1.91.1. Since #672 the
extenddbbinary depends onextenddb-backup-storethroughextenddb-app, so the images and npm binaries built from main linkaws-smithy-json0.62.3. With this change they link 0.62.7.Why
Dependabot alert 19 (high) covers CVE-2026-18140, GHSA-8ffr-xgwf-xj56. Versions of
aws-smithy-jsonup to 0.62.6 recurse without a depth limit while they skip an unknown key. A deeply nested document can exhaust the stack. The first version with the fix is 0.62.7.No issue. The alert is at https://github.com/ExtendDB/extenddb/security/dependabot/19.
Testing done
The lock commit, on stable (1.99.0):
cargo tree -i aws-smithy-json --locked: one version, 0.62.7, reached throughaws-config,aws-sdk-s3,aws-sdk-sso,aws-sdk-ssooidcandaws-sdk-sts.cargo check --locked --workspace: pass.cargo test --locked -p extenddb-backup-store --lib: 33 passed, 0 failed.cargo test --locked -p extenddb-backup-store --test conformance: the S3 tests skip withoutEXTENDDB_TEST_S3_ENDPOINT. The filesystem tests need a temporary directory whose ancestors belong to root or to the test user. The build host has no such directory, so CI runs them.The minimum version commits:
cargo +1.97.0 fmt --all -- --check: pass.cargo +1.91.1 check --locked --workspace --all-targets: pass.cargo +1.91.1 test --locked -p extenddb-backup-store --lib: 33 passed, 0 failed.cargo +1.88.0 check --locked -p extenddb: refused, "extenddb-server@0.1.14 requires rustc 1.91.1", as expected.cargo +1.97.0 clippy --locked --all-targets --features extenddb-storage-cassandra/test-hooks,extenddb-storage-mongodb/test-hooks -- -D warnings, the CI command with--lockedadded: pass after the threeDurationchanges. Before them it failed onclippy::duration_suboptimal_unitsinextenddb-cache.cargo +1.91.1 test --locked -p extenddb-cache --lib: 27 passed, 0 failed.After merging main at e681b8b:
aws-smithycrates above.cargo tree --locked -p extenddb -i aws-smithy-json -e normal: the binary reaches 0.62.7 throughextenddb-app,extenddb-backup-storeandaws-config.cargo +1.97.0 fmt --all -- --check: pass.clippy.yml, on 1.97.0 with--lockedand-D warnings: pass.cargo +1.91.1 check --locked --workspace --all-targets: pass.cargo +1.91.1 check --locked -p extenddb --no-default-features, once each with--features mongodb,--features sqlite,dev-modeand--features cassandra: pass, with no warnings. The 1.91.1 leg oftest.ymlbuilds the binary with its defaultpostgresfeature only.cargo +1.91.1 test --locked -p extenddb-backup-store --lib: 37 passed, 0 failed.cargo +1.91.1 test --locked -p extenddb-cache --lib: 27 passed, 0 failed.devtools/generate-software-license-notices --checkfor postgres, mongodb and cassandra, anddevtools/generate-dev-license-notices --check: pass after the regeneration.rust:1.91.1-bookwormdigest is the one Docker Hub serves for that tag today, and public.ecr.aws serves it.At the head, e2b8daa, on amd64:
cargo +1.97.0 fmt --all -- --check: pass.docker buildofDockerfile,Dockerfile.mongodbandDockerfile.dev: pass. Pull request CI builds onlyDockerfile.cassandra(smoke-cassandra-image.yml), and the release workflows build the other three. The postgres build installs cargo-auditable 0.7.7 on 1.91.1, and the other two builds reuse that layer. All three compileaws-smithy-json0.62.7.docker run --rm --read-only --network none <image> --versionfor each of the three images: printsextenddb 0.1.14, commite2b8daa09778and the build time. No arm64 build of these three images ran.Checklist
cargo test --workspace)cargo fmt --check)cargo clippy -- -W clippy::pedantic)Storagetrait, auth model, on-diskformat, or public CLI surface, an RFC has been accepted or is linked
below. Otherwise, an ADR captures the decision (link below).
ADR / RFC: n/a
Breaking changes
Building ExtendDB from source needs Rust 1.91.1 or newer. An older toolchain stops with "requires rustc 1.91.1". Users of the published images and npm packages need no new toolchain, because CI builds them.
By submitting this pull request, I confirm that my contribution is made under
the terms of the Apache License 2.0 and I agree to the Developer Certificate of
Origin (DCO). See CONTRIBUTING.md for details.