Skip to content

refactor(shm)!: Extract one_way_shared_memory to IPC and prepare libdd-remote-config for python#2121

Open
bwoebi wants to merge 4 commits into
mainfrom
bob/python-rc
Open

refactor(shm)!: Extract one_way_shared_memory to IPC and prepare libdd-remote-config for python#2121
bwoebi wants to merge 4 commits into
mainfrom
bob/python-rc

Conversation

@bwoebi

@bwoebi bwoebi commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Adds pyo3 to the enums to expose them directly, fixes the acknowledgment status and adds futex_wait to shm.

@bwoebi bwoebi requested review from a team as code owners June 15, 2026 19:07
@datadog-prod-us1-5

datadog-prod-us1-5 Bot commented Jun 15, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 53.07%
Overall Coverage: 73.35% (-0.02%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: c06b8a8 | Docs | Datadog PR Page | Give us feedback!

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

📚 Documentation Check Results

⚠️ 7147 documentation warning(s) found

📦 datadog-ipc - 903 warning(s)

📦 datadog-sidecar-ffi - 2994 warning(s)

📦 datadog-sidecar - 2726 warning(s)

📦 libdd-remote-config - 524 warning(s)


Updated: 2026-06-17 22:02:39 UTC | Commit: 47d0490 | missing-docs job results

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/bob/python-rc

Summary by Rule

Rule Base Branch PR Branch Change
expect_used 2 2 No change (0%)
panic 2 2 No change (0%)
unwrap_used 27 27 No change (0%)
Total 31 31 No change (0%)

Annotation Counts by File

File Base Branch PR Branch Change
datadog-ipc/src/one_way_shared_memory.rs 0 1 ⚠️ +1 (N/A)
datadog-ipc/src/platform/unix/mem_handle.rs 2 2 No change (0%)
datadog-ipc/src/platform/unix/mem_handle_macos.rs 6 6 No change (0%)
datadog-ipc/src/platform/windows/mem_handle.rs 4 4 No change (0%)
datadog-sidecar/src/agent_remote_config.rs 2 2 No change (0%)
datadog-sidecar/src/one_way_shared_memory.rs 1 0 ✅ -1 (-100.0%)
datadog-sidecar/src/service/agent_info.rs 4 4 No change (0%)
datadog-sidecar/src/service/telemetry.rs 3 3 No change (0%)
datadog-sidecar/src/shm_remote_config.rs 8 8 No change (0%)
libdd-remote-config/src/fetch/fetcher.rs 1 1 No change (0%)

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 21 22 ⚠️ +1 (+4.8%)
datadog-live-debugger 4 4 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-sidecar 45 45 No change (0%)
libdd-common 13 13 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-data-pipeline 5 5 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-remote-config 3 3 No change (0%)
libdd-telemetry 20 20 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 3 3 No change (0%)
libdd-trace-stats 1 1 No change (0%)
libdd-trace-utils 12 12 No change (0%)
Total 181 182 ⚠️ +1 (+0.6%)

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality.

@github-actions

github-actions Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

🔒 Cargo Deny Results

⚠️ 23 issue(s) found, showing only errors (advisories, bans, sources)

📦 datadog-ipc - 5 error(s)

Show output
error[unmaintained]: Bincode is unmaintained
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:25:1
   │
25 │ bincode 1.3.3 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unmaintained advisory detected
   │
   ├ ID: RUSTSEC-2025-0141
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2025-0141
   ├ Due to a doxxing and harassment incident, the bincode team has taken the decision to cease development permanently.
     
     The team considers version 1.3.3 a complete version of bincode that is not in need of any updates.
     
     ## Alternatives to consider
     
     * [wincode](https://crates.io/crates/wincode)
     * [postcard](https://crates.io/crates/postcard)
     * [bitcode](https://crates.io/crates/bitcode)
     * [rkyv](https://crates.io/crates/rkyv)
   ├ Announcement: https://git.sr.ht/~stygianentity/bincode/tree/v3.0/item/README.md
   ├ Solution: No safe upgrade is available!
   ├ bincode v1.3.3
     └── datadog-ipc v0.1.0

error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:201:1
    │
201 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      ├── (dev) libdd-common v4.2.0
      │   ├── datadog-ipc v0.1.0
      │   ├── libdd-capabilities-impl v2.0.0
      │   │   ├── libdd-shared-runtime v1.0.0
      │   │   │   └── libdd-trace-stats v5.0.0
      │   │   │       └── datadog-ipc v0.1.0 (*)
      │   │   ├── libdd-trace-stats v5.0.0 (*)
      │   │   └── libdd-trace-utils v8.0.0
      │   │       ├── libdd-trace-obfuscation v4.0.0
      │   │       │   └── libdd-trace-stats v5.0.0 (*)
      │   │       ├── libdd-trace-stats v5.0.0 (*)
      │   │       └── (dev) libdd-trace-utils v8.0.0 (*)
      │   ├── libdd-shared-runtime v1.0.0 (*)
      │   ├── libdd-trace-obfuscation v4.0.0 (*)
      │   ├── libdd-trace-stats v5.0.0 (*)
      │   └── libdd-trace-utils v8.0.0 (*)
      ├── (dev) libdd-ddsketch v1.0.1
      │   ├── datadog-ipc v0.1.0 (*)
      │   └── libdd-trace-stats v5.0.0 (*)
      ├── (dev) libdd-trace-normalization v2.0.0
      │   └── libdd-trace-utils v8.0.0 (*)
      ├── (dev) libdd-trace-stats v5.0.0 (*)
      ├── libdd-trace-utils v8.0.0 (*)
      └── proptest v1.5.0
          └── (dev) libdd-tinybytes v1.1.1
              ├── datadog-ipc v0.1.0 (*)
              ├── (dev) libdd-tinybytes v1.1.1 (*)
              └── libdd-trace-utils v8.0.0 (*)

error[vulnerability]: Name constraints for URI names were incorrectly accepted
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:226:1
    │
226 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0098
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
    ├ Name constraints for URI names were ignored and therefore accepted.
      
      Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ipc v0.1.0
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       └── datadog-ipc v0.1.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Name constraints were accepted for certificates asserting a wildcard name
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:226:1
    │
226 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0099
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0099
    ├ Permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name.
      
      This was incorrect because, given a name constraint of `accept.example.com`, `*.example.com` could feasibly allow a name of `reject.example.com` which is outside the constraint.
      This is very similar to [CVE-2025-61727](https://go.dev/issue/76442).
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-xgp8-3hg3-c2mh](https://github.com/rustls/webpki/security/advisories/GHSA-xgp8-3hg3-c2mh). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ipc v0.1.0
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       └── datadog-ipc v0.1.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Reachable panic in certificate revocation list parsing
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:226:1
    │
226 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0104
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0104
    ├ A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]
      or [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty
      `BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.
      
      This panic is reachable prior to a CRL's signature being verified.
      
      Applications that do not use CRLs are not affected.
      
      Thank you to @tynus3 for the report.
    ├ Solution: Upgrade to >=0.103.13, <0.104.0-alpha.1 OR >=0.104.0-alpha.7 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ipc v0.1.0
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       └── datadog-ipc v0.1.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

advisories FAILED, bans ok, sources ok

📦 datadog-sidecar-ffi - 7 error(s)

Show output
error[unmaintained]: Bincode is unmaintained
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:37:1
   │
37 │ bincode 1.3.3 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unmaintained advisory detected
   │
   ├ ID: RUSTSEC-2025-0141
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2025-0141
   ├ Due to a doxxing and harassment incident, the bincode team has taken the decision to cease development permanently.
     
     The team considers version 1.3.3 a complete version of bincode that is not in need of any updates.
     
     ## Alternatives to consider
     
     * [wincode](https://crates.io/crates/wincode)
     * [postcard](https://crates.io/crates/postcard)
     * [bitcode](https://crates.io/crates/bitcode)
     * [rkyv](https://crates.io/crates/rkyv)
   ├ Announcement: https://git.sr.ht/~stygianentity/bincode/tree/v3.0/item/README.md
   ├ Solution: No safe upgrade is available!
   ├ bincode v1.3.3
     ├── datadog-ipc v0.1.0
     │   ├── datadog-sidecar v0.0.1
     │   │   └── datadog-sidecar-ffi v0.0.1
     │   └── datadog-sidecar-ffi v0.0.1 (*)
     └── datadog-sidecar v0.0.1 (*)

error[unmaintained]: paste - no longer maintained
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:270:1
    │
270 │ paste 1.0.15 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unmaintained advisory detected
    │
    ├ ID: RUSTSEC-2024-0436
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2024-0436
    ├ The creator of the crate `paste` has stated in the [`README.md`](https://github.com/dtolnay/paste/blob/master/README.md) 
      that this project is not longer maintained as well as archived the repository
      
      ## Possible Alternative(s)
      
      - [`pastey`]: a fork of paste and is aimed to be a drop-in replacement with additional features for paste crate
      - [`with_builtin_macros`]: crate providing a [superset of `paste`'s functionality including general `macro_rules!` eager expansions](https://docs.rs/with_builtin_macros/0.1.0/with_builtin_macros/macro.with_eager_expansions.html)  and `concat!`/`concat_idents!` macros
      
      [`pastey`]: https://crates.io/crates/pastey
      [`with_builtin_macros`]: https://crates.io/crates/with_builtin_macros
    ├ Announcement: https://github.com/dtolnay/paste
    ├ Solution: No safe upgrade is available!
    ├ paste v1.0.15
      ├── datadog-sidecar-ffi v0.0.1
      ├── libdd-libunwind-sys v1.0.2
      │   └── libdd-crashtracker v1.0.0
      │       ├── datadog-sidecar v0.0.1
      │       │   └── datadog-sidecar-ffi v0.0.1 (*)
      │       ├── datadog-sidecar-ffi v0.0.1 (*)
      │       └── libdd-crashtracker-ffi v35.0.0
      │           ├── datadog-sidecar v0.0.1 (*)
      │           └── datadog-sidecar-ffi v0.0.1 (*)
      ├── libdd-telemetry-ffi v35.0.0
      │   └── datadog-sidecar-ffi v0.0.1 (*)
      └── rmp v0.8.14
          ├── libdd-trace-utils v8.0.0
          │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │   ├── (dev) datadog-sidecar-ffi v0.0.1 (*)
          │   ├── libdd-data-pipeline v6.0.0
          │   │   ├── datadog-live-debugger v0.0.1
          │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │   │   │   └── datadog-sidecar-ffi v0.0.1 (*)
          │   │   └── datadog-sidecar v0.0.1 (*)
          │   ├── libdd-trace-obfuscation v4.0.0
          │   │   └── libdd-trace-stats v5.0.0
          │   │       ├── datadog-ipc v0.1.0
          │   │       │   ├── datadog-sidecar v0.0.1 (*)
          │   │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │   │       ├── datadog-sidecar v0.0.1 (*)
          │   │       └── libdd-data-pipeline v6.0.0 (*)
          │   ├── libdd-trace-stats v5.0.0 (*)
          │   └── (dev) libdd-trace-utils v8.0.0 (*)
          ├── rmp-serde v1.3.0
          │   ├── datadog-sidecar v0.0.1 (*)
          │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │   ├── libdd-data-pipeline v6.0.0 (*)
          │   ├── (dev) libdd-tinybytes v1.1.1
          │   │   ├── datadog-ipc v0.1.0 (*)
          │   │   ├── datadog-sidecar v0.0.1 (*)
          │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │   │   ├── (dev) libdd-tinybytes v1.1.1 (*)
          │   │   └── libdd-trace-utils v8.0.0 (*)
          │   ├── libdd-trace-stats v5.0.0 (*)
          │   └── libdd-trace-utils v8.0.0 (*)
          └── rmpv v1.3.0
              └── libdd-trace-utils v8.0.0 (*)

error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:300:1
    │
300 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      ├── datadog-sidecar v0.0.1
      │   └── datadog-sidecar-ffi v0.0.1
      ├── libdd-common v4.2.0
      │   ├── datadog-ffe v1.0.0
      │   │   └── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-ipc v0.1.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── datadog-live-debugger v0.0.1
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── libdd-capabilities-impl v2.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-data-pipeline v6.0.0
      │   │   │   ├── datadog-live-debugger v0.0.1 (*)
      │   │   │   └── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-shared-runtime v1.0.0
      │   │   │   ├── libdd-data-pipeline v6.0.0 (*)
      │   │   │   ├── libdd-telemetry v5.0.1
      │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   │   │   ├── libdd-crashtracker v1.0.0
      │   │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
      │   │   │   │   │       ├── datadog-sidecar v0.0.1 (*)
      │   │   │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
      │   │   │   │   ├── libdd-data-pipeline v6.0.0 (*)
      │   │   │   │   └── libdd-telemetry-ffi v35.0.0
      │   │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
      │   │   │   └── libdd-trace-stats v5.0.0
      │   │   │       ├── datadog-ipc v0.1.0 (*)
      │   │   │       ├── datadog-sidecar v0.0.1 (*)
      │   │   │       └── libdd-data-pipeline v6.0.0 (*)
      │   │   ├── libdd-trace-stats v5.0.0 (*)
      │   │   └── libdd-trace-utils v8.0.0
      │   │       ├── (dev) datadog-sidecar v0.0.1 (*)
      │   │       ├── (dev) datadog-sidecar-ffi v0.0.1 (*)
      │   │       ├── libdd-data-pipeline v6.0.0 (*)
      │   │       ├── libdd-trace-obfuscation v4.0.0
      │   │       │   └── libdd-trace-stats v5.0.0 (*)
      │   │       ├── libdd-trace-stats v5.0.0 (*)
      │   │       └── (dev) libdd-trace-utils v8.0.0 (*)
      │   ├── libdd-common-ffi v35.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   ├── libdd-crashtracker-ffi v35.0.0 (*)
      │   │   └── libdd-telemetry-ffi v35.0.0 (*)
      │   ├── (build) libdd-crashtracker v1.0.0 (*)
      │   ├── libdd-crashtracker-ffi v35.0.0 (*)
      │   ├── libdd-data-pipeline v6.0.0 (*)
      │   ├── libdd-dogstatsd-client v3.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   └── libdd-data-pipeline v6.0.0 (*)
      │   ├── libdd-remote-config v0.1.0
      │   │   ├── datadog-ffe v1.0.0 (*)
      │   │   ├── datadog-live-debugger v0.0.1 (*)
      │   │   ├── (dev) datadog-sidecar v0.0.1 (*)
      │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   │   └── (dev) libdd-remote-config v0.1.0 (*)
      │   ├── libdd-shared-runtime v1.0.0 (*)
      │   ├── libdd-telemetry v5.0.1 (*)
      │   ├── libdd-telemetry-ffi v35.0.0 (*)
      │   ├── libdd-trace-obfuscation v4.0.0 (*)
      │   ├── libdd-trace-stats v5.0.0 (*)
      │   └── libdd-trace-utils v8.0.0 (*)
      ├── libdd-crashtracker v1.0.0 (*)
      ├── (dev) libdd-data-pipeline v6.0.0 (*)
      ├── (dev) libdd-ddsketch v1.0.1
      │   ├── datadog-ipc v0.1.0 (*)
      │   ├── libdd-data-pipeline v6.0.0 (*)
      │   ├── libdd-telemetry v5.0.1 (*)
      │   └── libdd-trace-stats v5.0.0 (*)
      ├── (dev) libdd-trace-normalization v2.0.0
      │   ├── libdd-data-pipeline v6.0.0 (*)
      │   └── libdd-trace-utils v8.0.0 (*)
      ├── (dev) libdd-trace-stats v5.0.0 (*)
      ├── libdd-trace-utils v8.0.0 (*)
      └── proptest v1.5.0
          └── (dev) libdd-tinybytes v1.1.1
              ├── datadog-ipc v0.1.0 (*)
              ├── datadog-sidecar v0.0.1 (*)
              ├── datadog-sidecar-ffi v0.0.1 (*)
              ├── libdd-data-pipeline v6.0.0 (*)
              ├── (dev) libdd-tinybytes v1.1.1 (*)
              └── libdd-trace-utils v8.0.0 (*)

error[vulnerability]: Name constraints for URI names were incorrectly accepted
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:327:1
    │
327 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0098
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
    ├ Name constraints for URI names were ignored and therefore accepted.
      
      Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ffe v1.0.0
          │       │   └── datadog-sidecar v0.0.1
          │       │       └── datadog-sidecar-ffi v0.0.1
          │       ├── datadog-ipc v0.1.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v6.0.0
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   ├── libdd-telemetry v5.0.1
          │       │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   ├── libdd-crashtracker v1.0.0
          │       │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
          │       │   │   │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   │   └── libdd-telemetry-ffi v35.0.0
          │       │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       ├── datadog-ipc v0.1.0 (*)
          │       │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │       └── libdd-data-pipeline v6.0.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── (dev) datadog-sidecar-ffi v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v6.0.0 (*)
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-common-ffi v35.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       │   └── libdd-telemetry-ffi v35.0.0 (*)
          │       ├── (build) libdd-crashtracker v1.0.0 (*)
          │       ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-dogstatsd-client v3.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-remote-config v0.1.0
          │       │   ├── datadog-ffe v1.0.0 (*)
          │       │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── (dev) libdd-remote-config v0.1.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-telemetry v5.0.1 (*)
          │       ├── libdd-telemetry-ffi v35.0.0 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Name constraints were accepted for certificates asserting a wildcard name
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:327:1
    │
327 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0099
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0099
    ├ Permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name.
      
      This was incorrect because, given a name constraint of `accept.example.com`, `*.example.com` could feasibly allow a name of `reject.example.com` which is outside the constraint.
      This is very similar to [CVE-2025-61727](https://go.dev/issue/76442).
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-xgp8-3hg3-c2mh](https://github.com/rustls/webpki/security/advisories/GHSA-xgp8-3hg3-c2mh). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ffe v1.0.0
          │       │   └── datadog-sidecar v0.0.1
          │       │       └── datadog-sidecar-ffi v0.0.1
          │       ├── datadog-ipc v0.1.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v6.0.0
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   ├── libdd-telemetry v5.0.1
          │       │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   ├── libdd-crashtracker v1.0.0
          │       │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
          │       │   │   │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   │   └── libdd-telemetry-ffi v35.0.0
          │       │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       ├── datadog-ipc v0.1.0 (*)
          │       │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │       └── libdd-data-pipeline v6.0.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── (dev) datadog-sidecar-ffi v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v6.0.0 (*)
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-common-ffi v35.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       │   └── libdd-telemetry-ffi v35.0.0 (*)
          │       ├── (build) libdd-crashtracker v1.0.0 (*)
          │       ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-dogstatsd-client v3.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-remote-config v0.1.0
          │       │   ├── datadog-ffe v1.0.0 (*)
          │       │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── (dev) libdd-remote-config v0.1.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-telemetry v5.0.1 (*)
          │       ├── libdd-telemetry-ffi v35.0.0 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Reachable panic in certificate revocation list parsing
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:327:1
    │
327 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0104
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0104
    ├ A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]
      or [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty
      `BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.
      
      This panic is reachable prior to a CRL's signature being verified.
      
      Applications that do not use CRLs are not affected.
      
      Thank you to @tynus3 for the report.
    ├ Solution: Upgrade to >=0.103.13, <0.104.0-alpha.1 OR >=0.104.0-alpha.7 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ffe v1.0.0
          │       │   └── datadog-sidecar v0.0.1
          │       │       └── datadog-sidecar-ffi v0.0.1
          │       ├── datadog-ipc v0.1.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar-ffi v0.0.1 (*)
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v6.0.0
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   ├── libdd-telemetry v5.0.1
          │       │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   ├── libdd-crashtracker v1.0.0
          │       │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
          │       │   │   │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   │   └── libdd-telemetry-ffi v35.0.0
          │       │   │   │       └── datadog-sidecar-ffi v0.0.1 (*)
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       ├── datadog-ipc v0.1.0 (*)
          │       │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │       └── libdd-data-pipeline v6.0.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── (dev) datadog-sidecar-ffi v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v6.0.0 (*)
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-common-ffi v35.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       │   └── libdd-telemetry-ffi v35.0.0 (*)
          │       ├── (build) libdd-crashtracker v1.0.0 (*)
          │       ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-dogstatsd-client v3.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-remote-config v0.1.0
          │       │   ├── datadog-ffe v1.0.0 (*)
          │       │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   ├── datadog-sidecar-ffi v0.0.1 (*)
          │       │   └── (dev) libdd-remote-config v0.1.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-telemetry v5.0.1 (*)
          │       ├── libdd-telemetry-ffi v35.0.0 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Denial of Service via Stack Exhaustion
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:389:1
    │
389 │ time 0.3.41 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0009
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0009
    ├ ## Impact
      
      When user-provided input is provided to any type that parses with the RFC 2822 format, a denial of
      service attack via stack exhaustion is possible. The attack relies on formally deprecated and
      rarely-used features that are part of the RFC 2822 format used in a malicious manner. Ordinary,
      non-malicious input will never encounter this scenario.
      
      ## Patches
      
      A limit to the depth of recursion was added in v0.3.47. From this version, an error will be returned
      rather than exhausting the stack.
      
      ## Workarounds
      
      Limiting the length of user input is the simplest way to avoid stack exhaustion, as the amount of
      the stack consumed would be at most a factor of the length of the input.
    ├ Announcement: https://github.com/time-rs/time/blob/main/CHANGELOG.md#0347-2026-02-05
    ├ Solution: Upgrade to >=0.3.47 (try `cargo update -p time`)
    ├ time v0.3.41
      ├── libdd-remote-config v0.1.0
      │   ├── datadog-ffe v1.0.0
      │   │   └── datadog-sidecar v0.0.1
      │   │       └── datadog-sidecar-ffi v0.0.1
      │   ├── datadog-live-debugger v0.0.1
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── datadog-sidecar-ffi v0.0.1 (*)
      │   ├── (dev) datadog-sidecar v0.0.1 (*)
      │   ├── datadog-sidecar-ffi v0.0.1 (*)
      │   └── (dev) libdd-remote-config v0.1.0 (*)
      └── tracing-appender v0.2.3
          └── libdd-log v1.0.0
              └── (dev) libdd-data-pipeline v6.0.0
                  ├── datadog-live-debugger v0.0.1 (*)
                  └── datadog-sidecar v0.0.1 (*)

advisories FAILED, bans ok, sources ok

📦 datadog-sidecar - 6 error(s)

Show output
error[unmaintained]: Bincode is unmaintained
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:37:1
   │
37 │ bincode 1.3.3 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unmaintained advisory detected
   │
   ├ ID: RUSTSEC-2025-0141
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2025-0141
   ├ Due to a doxxing and harassment incident, the bincode team has taken the decision to cease development permanently.
     
     The team considers version 1.3.3 a complete version of bincode that is not in need of any updates.
     
     ## Alternatives to consider
     
     * [wincode](https://crates.io/crates/wincode)
     * [postcard](https://crates.io/crates/postcard)
     * [bitcode](https://crates.io/crates/bitcode)
     * [rkyv](https://crates.io/crates/rkyv)
   ├ Announcement: https://git.sr.ht/~stygianentity/bincode/tree/v3.0/item/README.md
   ├ Solution: No safe upgrade is available!
   ├ bincode v1.3.3
     ├── datadog-ipc v0.1.0
     │   └── datadog-sidecar v0.0.1
     └── datadog-sidecar v0.0.1 (*)

error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:298:1
    │
298 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
    │
    ├ ID: RUSTSEC-2026-0097
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
    ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
      
      - The `log` and `thread_rng` features are enabled
      - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
      - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
      - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
      - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
      
      `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
    ├ Announcement: https://github.com/rust-random/rand/pull/1763
    ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
    ├ rand v0.8.5
      ├── datadog-sidecar v0.0.1
      ├── libdd-common v4.2.0
      │   ├── datadog-ffe v1.0.0
      │   │   └── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-ipc v0.1.0
      │   │   └── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-live-debugger v0.0.1
      │   │   └── datadog-sidecar v0.0.1 (*)
      │   ├── datadog-sidecar v0.0.1 (*)
      │   ├── libdd-capabilities-impl v2.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-data-pipeline v6.0.0
      │   │   │   ├── datadog-live-debugger v0.0.1 (*)
      │   │   │   └── datadog-sidecar v0.0.1 (*)
      │   │   ├── libdd-shared-runtime v1.0.0
      │   │   │   ├── libdd-data-pipeline v6.0.0 (*)
      │   │   │   ├── libdd-telemetry v5.0.1
      │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   │   ├── libdd-crashtracker v1.0.0
      │   │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
      │   │   │   │   │       └── datadog-sidecar v0.0.1 (*)
      │   │   │   │   └── libdd-data-pipeline v6.0.0 (*)
      │   │   │   └── libdd-trace-stats v5.0.0
      │   │   │       ├── datadog-ipc v0.1.0 (*)
      │   │   │       ├── datadog-sidecar v0.0.1 (*)
      │   │   │       └── libdd-data-pipeline v6.0.0 (*)
      │   │   ├── libdd-trace-stats v5.0.0 (*)
      │   │   └── libdd-trace-utils v8.0.0
      │   │       ├── (dev) datadog-sidecar v0.0.1 (*)
      │   │       ├── libdd-data-pipeline v6.0.0 (*)
      │   │       ├── libdd-trace-obfuscation v4.0.0
      │   │       │   └── libdd-trace-stats v5.0.0 (*)
      │   │       ├── libdd-trace-stats v5.0.0 (*)
      │   │       └── (dev) libdd-trace-utils v8.0.0 (*)
      │   ├── libdd-common-ffi v35.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── libdd-crashtracker-ffi v35.0.0 (*)
      │   ├── (build) libdd-crashtracker v1.0.0 (*)
      │   ├── libdd-crashtracker-ffi v35.0.0 (*)
      │   ├── libdd-data-pipeline v6.0.0 (*)
      │   ├── libdd-dogstatsd-client v3.0.0
      │   │   ├── datadog-sidecar v0.0.1 (*)
      │   │   └── libdd-data-pipeline v6.0.0 (*)
      │   ├── libdd-remote-config v0.1.0
      │   │   ├── datadog-ffe v1.0.0 (*)
      │   │   ├── datadog-live-debugger v0.0.1 (*)
      │   │   ├── (dev) datadog-sidecar v0.0.1 (*)
      │   │   └── (dev) libdd-remote-config v0.1.0 (*)
      │   ├── libdd-shared-runtime v1.0.0 (*)
      │   ├── libdd-telemetry v5.0.1 (*)
      │   ├── libdd-trace-obfuscation v4.0.0 (*)
      │   ├── libdd-trace-stats v5.0.0 (*)
      │   └── libdd-trace-utils v8.0.0 (*)
      ├── libdd-crashtracker v1.0.0 (*)
      ├── (dev) libdd-data-pipeline v6.0.0 (*)
      ├── (dev) libdd-ddsketch v1.0.1
      │   ├── datadog-ipc v0.1.0 (*)
      │   ├── libdd-data-pipeline v6.0.0 (*)
      │   ├── libdd-telemetry v5.0.1 (*)
      │   └── libdd-trace-stats v5.0.0 (*)
      ├── (dev) libdd-trace-normalization v2.0.0
      │   ├── libdd-data-pipeline v6.0.0 (*)
      │   └── libdd-trace-utils v8.0.0 (*)
      ├── (dev) libdd-trace-stats v5.0.0 (*)
      ├── libdd-trace-utils v8.0.0 (*)
      └── proptest v1.5.0
          └── (dev) libdd-tinybytes v1.1.1
              ├── datadog-ipc v0.1.0 (*)
              ├── datadog-sidecar v0.0.1 (*)
              ├── libdd-data-pipeline v6.0.0 (*)
              ├── (dev) libdd-tinybytes v1.1.1 (*)
              └── libdd-trace-utils v8.0.0 (*)

error[vulnerability]: Name constraints for URI names were incorrectly accepted
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:325:1
    │
325 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0098
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
    ├ Name constraints for URI names were ignored and therefore accepted.
      
      Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ffe v1.0.0
          │       │   └── datadog-sidecar v0.0.1
          │       ├── datadog-ipc v0.1.0
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v6.0.0
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   ├── libdd-telemetry v5.0.1
          │       │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   ├── libdd-crashtracker v1.0.0
          │       │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
          │       │   │   │   │       └── datadog-sidecar v0.0.1 (*)
          │       │   │   │   └── libdd-data-pipeline v6.0.0 (*)
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       ├── datadog-ipc v0.1.0 (*)
          │       │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │       └── libdd-data-pipeline v6.0.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v6.0.0 (*)
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-common-ffi v35.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── (build) libdd-crashtracker v1.0.0 (*)
          │       ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-dogstatsd-client v3.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-remote-config v0.1.0
          │       │   ├── datadog-ffe v1.0.0 (*)
          │       │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   └── (dev) libdd-remote-config v0.1.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-telemetry v5.0.1 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Name constraints were accepted for certificates asserting a wildcard name
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:325:1
    │
325 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0099
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0099
    ├ Permitted subtree name constraints for DNS names were accepted for certificates asserting a wildcard name.
      
      This was incorrect because, given a name constraint of `accept.example.com`, `*.example.com` could feasibly allow a name of `reject.example.com` which is outside the constraint.
      This is very similar to [CVE-2025-61727](https://go.dev/issue/76442).
      
      Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
      
      This vulnerability is identified as [GHSA-xgp8-3hg3-c2mh](https://github.com/rustls/webpki/security/advisories/GHSA-xgp8-3hg3-c2mh). Thank you to @1seal for the report.
    ├ Solution: Upgrade to >=0.103.12, <0.104.0-alpha.1 OR >=0.104.0-alpha.6 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ffe v1.0.0
          │       │   └── datadog-sidecar v0.0.1
          │       ├── datadog-ipc v0.1.0
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v6.0.0
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   ├── libdd-telemetry v5.0.1
          │       │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   ├── libdd-crashtracker v1.0.0
          │       │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
          │       │   │   │   │       └── datadog-sidecar v0.0.1 (*)
          │       │   │   │   └── libdd-data-pipeline v6.0.0 (*)
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       ├── datadog-ipc v0.1.0 (*)
          │       │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │       └── libdd-data-pipeline v6.0.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v6.0.0 (*)
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-common-ffi v35.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── (build) libdd-crashtracker v1.0.0 (*)
          │       ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-dogstatsd-client v3.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-remote-config v0.1.0
          │       │   ├── datadog-ffe v1.0.0 (*)
          │       │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   └── (dev) libdd-remote-config v0.1.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-telemetry v5.0.1 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Reachable panic in certificate revocation list parsing
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:325:1
    │
325 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0104
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0104
    ├ A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]
      or [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty
      `BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.
      
      This panic is reachable prior to a CRL's signature being verified.
      
      Applications that do not use CRLs are not affected.
      
      Thank you to @tynus3 for the report.
    ├ Solution: Upgrade to >=0.103.13, <0.104.0-alpha.1 OR >=0.104.0-alpha.7 (try `cargo update -p rustls-webpki`)
    ├ rustls-webpki v0.103.10
      └── rustls v0.23.37
          ├── hyper-rustls v0.27.7
          │   └── libdd-common v4.2.0
          │       ├── datadog-ffe v1.0.0
          │       │   └── datadog-sidecar v0.0.1
          │       ├── datadog-ipc v0.1.0
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-live-debugger v0.0.1
          │       │   └── datadog-sidecar v0.0.1 (*)
          │       ├── datadog-sidecar v0.0.1 (*)
          │       ├── libdd-capabilities-impl v2.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-data-pipeline v6.0.0
          │       │   │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   │   └── datadog-sidecar v0.0.1 (*)
          │       │   ├── libdd-shared-runtime v1.0.0
          │       │   │   ├── libdd-data-pipeline v6.0.0 (*)
          │       │   │   ├── libdd-telemetry v5.0.1
          │       │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   ├── libdd-crashtracker v1.0.0
          │       │   │   │   │   ├── datadog-sidecar v0.0.1 (*)
          │       │   │   │   │   └── libdd-crashtracker-ffi v35.0.0
          │       │   │   │   │       └── datadog-sidecar v0.0.1 (*)
          │       │   │   │   └── libdd-data-pipeline v6.0.0 (*)
          │       │   │   └── libdd-trace-stats v5.0.0
          │       │   │       ├── datadog-ipc v0.1.0 (*)
          │       │   │       ├── datadog-sidecar v0.0.1 (*)
          │       │   │       └── libdd-data-pipeline v6.0.0 (*)
          │       │   ├── libdd-trace-stats v5.0.0 (*)
          │       │   └── libdd-trace-utils v8.0.0
          │       │       ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │       ├── libdd-data-pipeline v6.0.0 (*)
          │       │       ├── libdd-trace-obfuscation v4.0.0
          │       │       │   └── libdd-trace-stats v5.0.0 (*)
          │       │       ├── libdd-trace-stats v5.0.0 (*)
          │       │       └── (dev) libdd-trace-utils v8.0.0 (*)
          │       ├── libdd-common-ffi v35.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── (build) libdd-crashtracker v1.0.0 (*)
          │       ├── libdd-crashtracker-ffi v35.0.0 (*)
          │       ├── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-dogstatsd-client v3.0.0
          │       │   ├── datadog-sidecar v0.0.1 (*)
          │       │   └── libdd-data-pipeline v6.0.0 (*)
          │       ├── libdd-remote-config v0.1.0
          │       │   ├── datadog-ffe v1.0.0 (*)
          │       │   ├── datadog-live-debugger v0.0.1 (*)
          │       │   ├── (dev) datadog-sidecar v0.0.1 (*)
          │       │   └── (dev) libdd-remote-config v0.1.0 (*)
          │       ├── libdd-shared-runtime v1.0.0 (*)
          │       ├── libdd-telemetry v5.0.1 (*)
          │       ├── libdd-trace-obfuscation v4.0.0 (*)
          │       ├── libdd-trace-stats v5.0.0 (*)
          │       └── libdd-trace-utils v8.0.0 (*)
          ├── libdd-common v4.2.0 (*)
          └── tokio-rustls v0.26.0
              ├── hyper-rustls v0.27.7 (*)
              └── libdd-common v4.2.0 (*)

error[vulnerability]: Denial of Service via Stack Exhaustion
    ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:387:1
    │
387 │ time 0.3.41 registry+https://github.com/rust-lang/crates.io-index
    │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
    │
    ├ ID: RUSTSEC-2026-0009
    ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0009
    ├ ## Impact
      
      When user-provided input is provided to any type that parses with the RFC 2822 format, a denial of
      service attack via stack exhaustion is possible. The attack relies on formally deprecated and
      rarely-used features that are part of the RFC 2822 format used in a malicious manner. Ordinary,
      non-malicious input will never encounter this scenario.
      
      ## Patches
      
      A limit to the depth of recursion was added in v0.3.47. From this version, an error will be returned
      rather than exhausting the stack.
      
      ## Workarounds
      
      Limiting the length of user input is the simplest way to avoid stack exhaustion, as the amount of
      the stack consumed would be at most a factor of the length of the input.
    ├ Announcement: https://github.com/time-rs/time/blob/main/CHANGELOG.md#0347-2026-02-05
    ├ Solution: Upgrade to >=0.3.47 (try `cargo update -p time`)
    ├ time v0.3.41
      ├── libdd-remote-config v0.1.0
      │   ├── datadog-ffe v1.0.0
      │   │   └── datadog-sidecar v0.0.1
      │   ├── datadog-live-debugger v0.0.1
      │   │   └── datadog-sidecar v0.0.1 (*)
      │   ├── (dev) datadog-sidecar v0.0.1 (*)
      │   └── (dev) libdd-remote-config v0.1.0 (*)
      └── tracing-appender v0.2.3
          └── libdd-log v1.0.0
              └── (dev) libdd-data-pipeline v6.0.0
                  ├── datadog-live-debugger v0.0.1 (*)
                  └── datadog-sidecar v0.0.1 (*)

advisories FAILED, bans ok, sources ok

📦 libdd-remote-config - 5 error(s)

Show output
error[unsound]: Rand is unsound with a custom logger using `rand::rng()`
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:87:1
   │
87 │ rand 0.8.5 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ unsound advisory detected
   │
   ├ ID: RUSTSEC-2026-0097
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0097
   ├ It has been reported (by @lopopolo) that the `rand` library is [unsound](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#soundness-of-code--of-a-library) (i.e. that safe code using the public API can cause Undefined Behaviour) when all the following conditions are met:
     
     - The `log` and `thread_rng` features are enabled
     - A [custom logger](https://docs.rs/log/latest/log/#implementing-a-logger) is defined
     - The custom logger accesses `rand::rng()` (previously `rand::thread_rng()`) and calls any `TryRng` (previously `RngCore`) methods on `ThreadRng`
     - The `ThreadRng` (attempts to) reseed while called from the custom logger (this happens every 64 kB of generated data)
     - Trace-level logging is enabled or warn-level logging is enabled and the random source (the `getrandom` crate) is unable to provide a new seed
     
     `TryRng` (previously `RngCore`) methods for `ThreadRng` use `unsafe` code to cast `*mut BlockRng<ReseedingCore>` to `&mut BlockRng<ReseedingCore>`. When all the above conditions are met this results in an aliased mutable reference, violating the Stacked Borrows rules. Miri is able to detect this violation in sample code. Since construction of [aliased mutable references is Undefined Behaviour](https://doc.rust-lang.org/stable/nomicon/references.html), the behaviour of optimized builds is hard to predict.
   ├ Announcement: https://github.com/rust-random/rand/pull/1763
   ├ Solution: Upgrade to >=0.10.1 OR <0.10.0, >=0.9.3 OR <0.9.0, >=0.8.6 (try `cargo update -p rand`)
   ├ rand v0.8.5
     └── (dev) libdd-common v4.2.0
         └── libdd-remote-config v0.1.0
             └── (dev) libdd-remote-config v0.1.0 (*)

error[vulnerability]: Name constraints for URI names were incorrectly accepted
   ┌─ /home/runner/work/libdatadog/libdatadog/Cargo.lock:98:1
   │
98 │ rustls-webpki 0.103.10 registry+https://github.com/rust-lang/crates.io-index
   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ security vulnerability detected
   │
   ├ ID: RUSTSEC-2026-0098
   ├ Advisory: https://rustsec.org/advisories/RUSTSEC-2026-0098
   ├ Name constraints for URI names were ignored and therefore accepted.
     
     Note this library does not provide an API for asserting URI names, and URI name constraints are otherwise not implemented.  URI name constraints are now rejected unconditionally.
     
     Since name constraints are restrictions on otherwise properly-issued certificates, this bug is reachable only after signature verification and requires misissuance to exploit.
     
     This vulnerability is identified as [GHSA-965h-392x-2mh5](https://github.com/rustls/webpki/security/advisories/GHSA-965h-392x-2mh5). Thank you to @1seal for the report.
   ├ Solution: Upgrade to >=...*[Comment body truncated]*

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f999625063

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread datadog-ipc/src/lib.rs
pub mod example_interface;
pub mod handles;

pub mod one_way_shared_memory;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore the sidecar shared-memory export

Removing the public datadog_sidecar::one_way_shared_memory module breaks the FFI crate that still imports datadog_sidecar::one_way_shared_memory::{OneWayShmReader, ReaderOpener} in datadog-sidecar-ffi/src/lib.rs, so workspace builds that include datadog-sidecar-ffi fail after this move. Please either keep a compatibility re-export from datadog-sidecar or update the FFI crate to use the new datadog_ipc::one_way_shared_memory API and drop the removed ReaderOpener bound.

Useful? React with 👍 / 👎.

Comment thread libdd-remote-config/src/lib.rs Outdated
#[repr(C)]
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
#[cfg_attr(feature = "pyo3", pyo3::pyclass(eq, eq_int, from_py_object))]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case I'd leave the the pyo3 mirroring strictly to the dd-trace-py. That's the model we use for other crates which, IMO, is more flexible and maintanable for both teams.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done, made enum inspection available via strum to achieve the same goal.

Comment thread libdd-remote-config/src/path.rs Outdated
/// The handle can be mapped by readers in the same process or inherited by
/// forked children (an anonymous mapping survives `fork`), letting them build a
/// [`OneWayShmReader`] over what this writer publishes. The segment starts at one
/// page and grows on demand as larger buffers are written. Use

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The segment starts at one page and grows on demand as larger buffers are written

How does that work when the page is already shared? Is the existing data still left in place, and there's some linked list of pages in ShmHandle? Or is it copied over to some larger location? How does the reader notice that?

/// `handle` is the live mapping to read from — typically an anonymous segment
/// inherited across a `fork`. Passing `None` leaves the reader without a
/// mapping; since this constructor installs no opener, such a reader stays
/// inert (empty reads, `wait_for_change` sleeps) until a handle is supplied —

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Naive question: what is the use case for allowing a reader to have no underlying handle?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It makes no sense without opener, that's correct.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should new take a MappedMem<T> instead of an Option<_>? (whether you keep the option internally so that you can take it later is a different question)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's what I did :-D

let copied_data: &RawData = new_mem.as_slice().into();

// Ensure a new write hasn't started yet
fence(Ordering::Acquire); // prevent loads before from being reordered with gen load after

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think an acquire fence provide that. Usually you can move things past it. What you can't do is move things before it.

To be fair, this kind of passive reader scheme is just impossible to express safely in current Rust. The seqlock crate does use an Acquire fence as well, but I'm not sure what kind of guarantees it provides. On paper a Release fence is more adapted but it's not clear how it interacts with the load below since load can't be Release. Or maybe use a SeqCst fence just to be more constraining? That's what we do for the Otel process-level context, although this is more costly (in the OTel part we don't care, it's not read very often)

@bwoebi bwoebi Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We must not move the generation load before the read of the data from shm. Which is what the acquire guarantees.
Release fences are centered around writes, not reads.

That's why the comment says "prevent loads (from shm) from being reordered...".
The read/write ordering within a same thread is guaranteed to be consistent by the rust memory model (i.e. this doesn't need to be fenced).

@bwoebi bwoebi Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ordering requirements when reading are always towards external writers, i.e. reads from something which might be written to by some external writer.
I.e. the compiler is not allowed to assume that source_data points to the same data than the source used to copy from into source_data after the fence - i.e. not allowed to alias source and target - it must thus create a data dependency on the target data. Which it would ordinarily be allowed to, as copied data is "obviously" identical to the source.

@yannham yannham Jun 16, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure to understand exactly what you mean, sorry. Maybe I don't really understand the original comment.

While re-ordering is a useful mental model, it's not how the Rust memory model is defined anyway. What acquire gives you is that it synchronize the load on this thread with the corresponding store that put the value there on some other thread, creating a connection: that the store happens-before the load. So all observable memory accesses (shared but potentially non-atomic) done on the writer before writing the value to the atomic are visible on the reader side after we load. Since the load happens before whatever is next done on the reader side (sequenced-before), all memory accesses (shared but potentially non-atomic) occurring after the load will also not be re-ordered before the load (or acquire fence in our case).

However, it doesn't tell anything about accesses that are sequenced before the atomic load/ the fence on the reader thread. The following is, I believe, a totally legal re-ordering, if the compiler or the hardware think it can't be observed by the current thread (but this is always the case for a bunch of reads):

read address A (non-atomic)
read address B (non-atomic)
atomic load relaxed C
acquire fence
...rest

to

atomic load relaxed C
acquire fence
read address A (non-atomic)
read address B (non-atomic)
..rest

Whether it can happen in this specific case because of the data dependency is another question 🤷 , but I think the acquire fence doesn't help preventing it, or at least is not guaranteed to help.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(and by the way, an acquire fence should be placed after the corresponding load(s), see https://doc.rust-lang.org/std/sync/atomic/fn.fence.html#atomic---fence -- I'm not sure what is the semantics when put before)

@bwoebi bwoebi Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Our acquire fence is after the load by new_mem.extend_from_slice(unsafe { reinterpret_u8_as_u64_slice(&handle.as_slice()[0..size]) });. The problem is, as you say, that I cannot make this an atomic memcpy, because rust doesn't support it currently. But it's that one which the fence is supposed to synchronize with.
I think you might have a point that the subsequent Relaxed load also needs a release fence before, requiring AcqRel.

@yannham yannham Jun 16, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, I see, you're trying to protect this access. Indeed the seqlock-like readers like this just can't be implemented properly (at least in theory) in Rust, and the semantics of fences is a bit crazy (the whole "atomics are required" part is really unclear). I don't think there's a canonical and satisfying solution. I would say if perf is not critical here SeqCst might be safer (I know, I am the one usually ranting against SeqCst by default)

However, the seqlock crate does as you do, so I suppose it's also somehow reasonable. Acquire fences should be compiled to dmb ishld on arm, which provides sufficient guarantees on the hardware side in practice (all reads are completed before proceeding).

People have used volatile_read as well in addition to atomics, as this has lower risk of being re-ordered past atomics. Not sure if it's necessary.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exactly, and the dmb ishld on ARM is what we need, in practice. (x86 with its total store ordering is unproblematic).

Comment thread datadog-ipc/src/one_way_shared_memory.rs Outdated
Comment thread datadog-ipc/src/one_way_shared_memory.rs Outdated
Comment thread datadog-ipc/src/one_way_shared_memory.rs
Comment thread datadog-ipc/Cargo.toml
@bwoebi bwoebi changed the title Extract one_way_shared_memory to IPC and prepare libdd-remote-config for python refactor(shm): Extract one_way_shared_memory to IPC and prepare libdd-remote-config for python Jun 16, 2026
@bwoebi bwoebi changed the title refactor(shm): Extract one_way_shared_memory to IPC and prepare libdd-remote-config for python refactor(shm)!: Extract one_way_shared_memory to IPC and prepare libdd-remote-config for python Jun 16, 2026
@bwoebi bwoebi force-pushed the bob/python-rc branch 3 times, most recently from d58b844 to 806bad3 Compare June 16, 2026 17:40
@dd-octo-sts

dd-octo-sts Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 84.02 MB 84.02 MB -0% (-96 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 7.76 MB 7.76 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.36 MB 10.36 MB 0% (0 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 95.13 MB 95.13 MB +0% (+80 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 24.93 MB 24.93 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 87.33 KB 87.33 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 181.51 MB 181.52 MB +0% (+8.00 KB) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 928.21 MB 928.31 MB +.01% (+96.73 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.12 MB 8.12 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 87.33 KB 87.33 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 24.03 MB 24.03 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 47.96 MB 47.96 MB +0% (+296 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 21.62 MB 21.62 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 88.71 KB 88.71 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 185.58 MB 185.61 MB +.01% (+32.00 KB) 🔍
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 921.15 MB 921.24 MB +0% (+92.01 KB) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.27 MB 6.27 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 88.71 KB 88.71 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 25.76 MB 25.76 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 45.59 MB 45.59 MB -0% (-2 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 74.91 MB 74.91 MB +0% (+168 B) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 8.61 MB 8.61 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 90.33 MB 90.33 MB +0% (+96 B) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 10.48 MB 10.48 MB +0% (+8 B) 👌

@bwoebi bwoebi requested a review from a team as a code owner June 16, 2026 20:56
bwoebi added 4 commits June 17, 2026 18:25
…for python

Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants