Skip to content

build(deps): bump ring from 0.16.20 to 0.17.14#3

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/cargo/ring-0.17.14
Open

build(deps): bump ring from 0.16.20 to 0.17.14#3
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/cargo/ring-0.17.14

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 6, 2026

Copy link
Copy Markdown

Bumps ring from 0.16.20 to 0.17.14.

Changelog

Sourced from ring's changelog.

Version 0.17.14 (2025-03-11)

Fixed a performance bug in the AVX2-based AES-GCM implementation added in ring 0.17.13. This will be another notable performance improvement for most newish x86-64 systems. The performance issue impacted not just AES-GCM.

Compatibility with GNU binutils 2.29 (used on Amazon Linux 2), and probably even earlier versions, was restored. It is expected that ring 0.17.14 will build on all the systems that 0.17.12 would build on.

Version 0.17.13 (2025-03-06)

Increased MSRV to 1.66.0 to avoid bugs in earlier versions so that we can safely use core::arch::x86_64::__cpuid and core::arch::x86::__cpuid from Rust in future releases.

AVX2-based VAES-CLMUL implementation. This will be a notable performance improvement for most newish x86-64 systems. This will likely raise the minimum binutils version supported for very old Linux distros.

Version 0.17.12 (2025-03-05)

Bug fix: briansmith/ring#2447 for denial of service (DoS).

  • Fixes a panic in ring::aead::quic::HeaderProtectionKey::new_mask() when integer overflow checking is enabled. In the QUIC protocol, an attacker can induce this panic by sending a specially-crafted packet. Even unintentionally it is likely to occur in 1 out of every 2**32 packets sent and/or received.

  • Fixes a panic on 64-bit targets in ring::aead::{AES_128_GCM, AES_256_GCM} when overflow checking is enabled, when encrypting/decrypting approximately 68,719,476,700 bytes (about 64 gigabytes) of data in a single chunk. Protocols like TLS and SSH are not affected by this because those protocols break large amounts of data into small chunks. Similarly, most applications will not attempt to encrypt/decrypt 64GB of data in one chunk.

Overflow checking is not enabled in release mode by default, but RUSTFLAGS="-C overflow-checks" or overflow-checks = true in the Cargo.toml profile can override this. Overflow checking is usually enabled by default in debug mode.

Commits

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file rust Pull requests that update rust code labels Jul 6, 2026
@dependabot dependabot Bot force-pushed the dependabot/cargo/ring-0.17.14 branch 2 times, most recently from 09bdb4a to 7a3cddc Compare July 6, 2026 20:29
1456055067 added a commit that referenced this pull request Jul 7, 2026
…y) (#9)

* docs(rfc8415): refine plan — unified allocation, in-scope v6 DAD, crates/ paths

* feat(config): parse DHCPv6 IA_NA ranges and IA_PD pd_pools

RFC 8415 phase 1 (config only, no runtime behavior change).

- wire: add ranges (IpRange) + pd_pools (new PdPool) to v6 Net
- v6 config: parsed NetRange (dual valid/preferred lifetimes, exclusions)
  and PdPool (with delegated_len validation + total_prefixes); wire into
  Network + TryFrom; add ranges()/pd_pools()/range() accessors
- sample config_v6_pools.yaml + parser tests

* feat(ip-manager): DHCPv6 lease persistence (RFC 8415 phase 2)

Unified storage: keep the v4 leases table (INTEGER, hot path untouched) and
add a leases_v6 table (16-byte BLOB addr + prefix_len) for v6 bindings.

- migration: leases_v6 (addr, prefix_len, client_id/DUID+IAID, state, expiry)
- Storage trait: generalize insert_max_in_range exclusions HashSet<Ipv4Addr>
  -> HashSet<IpAddr>; inc_ip now filters v6 exclusions too
- sqlite: implement all address-keyed v6 arms via new util_v6 queries against
  leases_v6 (BLOB order == numeric order for big-endian v6); get_id searches
  both tables
- tests: v6 insert/get/get_id/release, sequential alloc with exclusions,
  reserve->lease, v4/v6 coexistence. 12 v4 tests still green (no regression)

count()/select_all() remain v4-only for now (metrics/API surface: phase 6).

* fix(ip-manager): address code-review findings on v6 storage

- #1 empty-range allocation now skips excluded addresses (new first_available
  helper), used by both v4 and v6 arms; fixes a livelock when a range's first
  address is excluded (was a latent v4 bug too). +regression test
- #2 release_ip only deletes when the (addr,id) pair matched, so a client can't
  release another client's lease; applied to both v4 and v6. +test
- #3 split get_id into get_id (v4) and get_id_v6 so identity lookups target one
  table deterministically — removes cross-family collision + v4 hot-path double
  query
- #4 from_bytes now requires exactly 16 bytes (try_into().expect) instead of
  silently zero-padding a corrupt BLOB
- #5 regenerate sqlx-data.json so SQLX_OFFLINE=true (CI) builds see leases_v6
- #6 to_bytes returns [u8;16] (no per-call heap alloc on the lease path)
- #7 reuse util::into_clientinfo in util_v6 (drop the duplicate)
- #8 drop the misleading PREFIX_LEN_NA const; use literal 128 consistently

Verified in WSL: 17 ip-manager tests pass (13 v4, no regression), full
workspace builds with SQLX_OFFLINE=true, clippy clean.

* refactor(ip-manager): unify allocation across v4/v6 (RFC 8415 phase 3a)

Generalize the reserve/next-available algorithm so DHCPv6 allocation flows
through the same path as v4, per the unify-upfront decision.

- new pool.rs: Pool + NetworkParams traits, impl'd for config v4 and v6
  NetRange/Network (family-neutral views over IpAddr)
- reserve_first / try_ip / try_lease / ping_check are now generic over these
  traits; the reserve loop is family-neutral (no more panic! on v6)
- ping_check dispatches by family: v4 ICMP echo as before; v6 DAD (Neighbor
  Solicitation) is stubbed to Ok until phase 4
- add IpManager::lookup_id_v6 for the upcoming v6 plugin
- test: v6 addresses allocated + leased end-to-end through reserve_first

v4 unchanged: 18 ip-manager tests pass (incl. all prior v4), leases/bin build,
clippy clean.

* feat(dhcpv6): IA_NA address assignment plugin (RFC 8415 phase 3b/3c)

Stateful DHCPv6 address assignment end-to-end:

- new crate plugins/leases-v6: Plugin<v6::Message> that runs after MsgType and
  allocates an address per requested IA_NA via the unified reserve_first path.
  Solicit -> Advertise (offer/Reserve), Request or Rapid-Commit Solicit -> Reply
  (commit/Lease). Builds IA_NA(opt 3) + IAADDR(opt 5) with T1/T2 and
  preferred/valid lifetimes; empty pool yields IA_NA + NoAddrsAvail status.
  Identity = DUID ++ IAID.
- message-type: v6 handler now classifies Solicit (Advertise, or Reply +
  RapidCommit) and Request (Reply), setting the response for leases-v6 to fill
- config: v6 rapid_commit flag (default false) + accessor
- bin: register LeasesV6 on the v6 server after MsgType

Verified (WSL, SQLX_OFFLINE): leases-v6 + message-type + ip-manager + config
tests pass, full workspace builds, clippy clean. Renew/Rebind/Confirm/Release/
Decline and v6 DAD are phase 4.

* feat(dhcpv6): IA_NA lifecycle + v6 DAD (RFC 8415 phase 4)

- leases-v6 now dispatches by message type and handles the full IA_NA lifecycle:
  * Renew/Rebind: extend existing bindings via new IpManager::renew (extend-only,
    never creates); unknown IA -> NoBinding; a Rebind matching nothing stays silent
  * Confirm: on-link check against the network prefix -> Success / NotOnLink
    (no lease change; silent if the client sent no addresses)
  * Release: free the client's addresses -> Success
  * Decline: put declined addresses on probation -> Success
- v6 DAD: IpManager gains an optional ICMPv6 listener (icmp-ping already supports
  Icmpv6); ping_check now probes v6 addresses via ICMPv6 echo. Best-effort:
  disabled if the socket can't be created (some CI/containers), never fails startup
- message-type: v6 handler passes Renew/Rebind/Confirm/Release/Decline through to
  leases-v6 (server-id presence still enforced for the types that require it)
- tests: IpManager::renew extend-only semantics; IA_NA/status-code builders

Verified (WSL, SQLX_OFFLINE): ip-manager 19, leases-v6 6, message-type 5 pass;
full workspace builds; clippy clean.

* feat(dhcpv6): IA_PD prefix delegation (RFC 8415 phase 5)

Delegate prefixes from the pd_pools parsed in phase 1.

- config: PdPool::iter_prefixes lazily enumerates delegated prefix bases
  (stepping by block size, skipping the except list)
- storage: leases_v6 now stores delegated prefixes keyed by (base, prefix_len)
  where prefix_len != 128. New Storage PD methods (get_pd/upsert_pd/get_id_pd/
  renew_pd/release_pd) via prefix-aware util_v6 queries; IA_NA path unchanged
- ip-manager: allocate_pd scans a pool for the first free/expired/owned prefix
  (bounded scan), reusing a client's existing delegation; renew_pd/release_pd
- leases-v6: Solicit/Request delegate a prefix per IA_PD -> IA_PD + IAPREFIX,
  NoPrefixAvail when the pool is empty; Renew/Rebind extend (NoBinding if
  unknown); Release frees. Confirm/Decline stay IA_NA-only (per RFC)
- sqlx-data.json regenerated (offline cache) for the new PD queries

Verified (WSL, SQLX_OFFLINE): ip-manager 20, leases-v6 8 tests pass (incl.
allocate_pd reuse/renew/release + IA_PD/IAPREFIX builders); full workspace
builds; clippy clean.

* feat(dhcpv6): metrics/API surface + docs (RFC 8415 phase 6)

- count() and select_all() now include leases_v6, so the /v1/leases API and
  the leased/probation metrics reflect v6 bindings (v4 metrics already wired;
  server calls recv/sent_metrics generically for both families)
- example.yaml: v6 rapid_commit flag + IA_NA ranges + IA_PD pd_pools
- docs: rfc_compliance.md flips the DHCPv6 rows to implemented; rfc8415_plan.md
  marked done with a phase table + remaining follow-ups

Verified (WSL, SQLX_OFFLINE): ip-manager 20 tests pass (select_all/count now
cover both families); full workspace builds; example.yaml parses via dora-cfg.

Known gap: end-to-end packet-level v6 integration tests need the netns/veth
sudo harness (like v4) and are deferred; logic is covered by unit + storage +
allocator tests.

* feat(dhcpv6): RelayForw/RelayRepl relay agent support (RFC 8415 sec 19)

- dora-core server/relay.rs: unwrap a (possibly nested) Relay-forward to the
  innermost client message + relay chain; wrap a response into a matching
  Relay-reply chain, echoing link/peer address and Interface-ID
- ServerDecode trait: v6 decode transparently unwraps a Relay-forward (a relay
  message has a different wire layout than a client message); v4 unchanged.
  MsgContext records the relay chain and exposes ctx.relay()
- RunInner v6: relayed responses are wrapped as a Relay-reply and sent back to
  the relay agent (request src) instead of unicast to the client
- config v6 get_network_by_addr: relayed messages pick the subnet by the relay
  link-address (RFC 8415 sec 13.1); leases-v6 uses it for network selection
- depends on usg-dhcproto relay API additions via [patch.crates-io] -> local
  ../dhcproto (feat/v6-relay-api). Publish/point at the git branch for CI.

Verified (WSL): dora-core 11 tests (4 relay: single/nested unwrap, wrap
roundtrip w/ interface-id echo), leases-v6 8, config get_network_by_addr;
full workspace builds, clippy clean. End-to-end packet path through a real
relay still needs the netns harness.

* docs(rfc_compliance): mark DHCPv6 relay (RelayForw/RelayRepl) implemented

* build(deps): bump usg-dhcproto 0.17.1 -> 0.18.0 (relay API)

The relay API additions are a breaking change in the fork, released as 0.18.0;
track the new version. Still patched to the local ../dhcproto checkout until
published.

* fix(dhcpv6): address code-review findings on IA lifetimes/lifecycle

- T1/T2 now derive from the PREFERRED lifetime, not valid (RFC 8415 §21.4), so
  clients renew before the address is deprecated
- assign/renew use the specific range/pd_pool's (preferred, valid) lifetimes
  (via na_lifetimes/pd_lifetimes) instead of always the network defaults
- Solicit offers are held for a short OFFER_WINDOW (60s), not the full valid
  lifetime, so Solicit-only clients can't exhaust the pool (committed leases
  still use the full valid lifetime) — new db_ttl helper
- Rebind omits IAs it has no binding for instead of replying NoBinding, which
  is Renew-only (RFC 8415 §18.3.5); Renew still answers NoBinding
- config: reject preferred_time > lease_time/valid (wire-invalid IAADDR clients
  would discard, §21.6) and pd_pool delegated_len >= 128 (collides with the
  IA_NA namespace in storage)

Verified (WSL): leases-v6 8 + config 42 tests pass (incl. 2 new validation
tests; T1/T2 assertions updated to preferred basis); full workspace builds,
clippy clean.

* build(deps): drop [patch.crates-io] now that usg-dhcproto 0.18.0 is published

dora resolves usg-dhcproto 0.18.0 from crates.io; the local ../dhcproto fork
override is no longer needed. Branch is now CI-buildable without the local
checkout.

* fix(dhcpv6): low-priority code-review findings

- message-type: discard Confirm/Rebind that carry a Server Identifier
  (RFC 8415 §16.5 / §16.9)
- leases-v6 allocate: reuse an existing binding anywhere in the network before
  the per-range reserve loop, so a multi-range network no longer deletes and
  re-issues a lease held in a different range (client address stays stable)
- ip-manager allocate_pd: only reuse a client's stored delegation if it belongs
  to the requested pool (matching delegated_len + parent prefix), so a roamed
  client is not handed a prefix from a pool that does not exist on this network
- sqlite upsert_pd: return Ok(()) on a mismatched family instead of panicking,
  matching the other v6 arms
- Release/Decline: reply with a per-IA NoBinding for IAs the server has no
  binding for, plus the top-level Success (RFC 8415 §18.3.7 / §18.3.8)

Verified (WSL): ip-manager 20, leases-v6 8, message-type 5 tests pass; full
workspace builds; clippy clean.

* fix(dhcpv6): address relay/lifecycle review findings (regressions + robustness)

- allocate reuse: a plain Solicit no longer mutates an existing binding (was
  demoting a committed lease to a 60s reservation via the offer window and
  try_ip); only a commit (Request/Rapid-Commit) refreshes it to a full lease
- allocate_prefix: reuse the client's delegation from whichever pd_pool holds it
  before the per-pool loop, so a multi-pool network keeps the prefix stable
  (the tightened per-pool reuse guard alone changed the prefix); new
  IpManager::lookup_id_pd
- relay subnet selection: fall back to the receiving interface when the relay
  link-address is unspecified (LDRA / RFC 6221) or names a network we don't
  serve, instead of dropping the message
- message-type v6: a relayed message no longer hard-fails when the receiving
  interface has no link-local (the client link comes from the relay)
- T2 now 0.8*preferred (RFC 8415 §21.4 recommendation), was 0.875
- config check_lifetimes also guards preferred.max <= valid.max

Verified (WSL): dora-core 11, ip-manager 20, leases-v6 8, message-type 5,
config 42 tests pass; full workspace builds; clippy clean.

* fix(dhcpv6): don't Renew/Rebind an off-link address or prefix (RFC 8415 §18.3.5)

Renew/Rebind matched a client binding by DUID+IAID globally and extended it with
a fresh lifetime even if the address/prefix was not on the client's currently
selected link (e.g. after the client roamed). Now only extend an address that
falls in one of the selected network's ranges, and a prefix delegated from one
of its pd_pools (new pd_on_link helper); an off-link binding is left unextended
so the client recovers via NoBinding/Solicit instead of continuing to use an
unroutable address.

Verified (WSL): leases-v6 8 tests pass; workspace builds; clippy clean.

* refactor(dhcpv6): dedup IA lifetime computation into helpers

Extract range_lifetimes(&NetRange) / pool_lifetimes(&PdPool) and use them from
allocate/allocate_prefix (inline) and na_lifetimes/pd_lifetimes, removing ~7
repetitions of `.preferred()/.valid().determine_lease(None).0`. No behavior
change; leases-v6 8 tests pass, clippy clean.

(The release/decline per-IA loops are left as-is: abstracting them behind an
async closure that captures &self adds more lifetime noise than the shallow
duplication removes.)

* test(dhcpv6): end-to-end packet-level relay integration tests

Add self-contained loopback-relay integration tests that drive real
packets through a running dora binary without netns/veth/sudo. The
server binds [::1] on a non-default port (unicast replies) and each
request is wrapped in a Relay-forward, so the subnet is selected by the
relay link-address rather than the receiving interface.

Covers the full IA_NA lifecycle (Solicit->Advertise, Request->Reply,
Renew->Reply, Release->Reply/Success), stable binding across repeat
Solicits, and IA_PD prefix delegation (Solicit->Advertise with an
IAPREFIX from the configured pd_pool).

* style(dhcpv6): apply rustfmt across v6 modules and integration tests
Bumps [ring](https://github.com/briansmith/ring) from 0.16.20 to 0.17.14.
- [Changelog](https://github.com/briansmith/ring/blob/main/RELEASES.md)
- [Commits](https://github.com/briansmith/ring/commits)

---
updated-dependencies:
- dependency-name: ring
  dependency-version: 0.17.14
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot force-pushed the dependabot/cargo/ring-0.17.14 branch from 7a3cddc to a1f9434 Compare July 8, 2026 20:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants