Email me

Rust advisories / eyre

Vulnerability HighRUSTSEC-2024-0021 · eyre

RUSTSEC-2024-0021: Parts of Report are dropped as the wrong type during downcast

Short answerA security vulnerability in the eyre crate: Parts of Report are dropped as the wrong type during downcast. GitHub rates it High. Fixed in 0.6.12: update to a fixed version.

Crateeyre
TypeVulnerability (memory-corruption)
Affected versionsFrom 0.6.9 before 0.6.12.
Fixed in0.6.12
SeverityHigh (GitHub rating)
Published2024-03-05
Last changed2024-07-15
Also known asGHSA-4v52-7q2x-v4xj
Affected functionseyre::Report::downcast

What to do

  1. See which version you have: cargo tree -i eyre (it also shows which of your dependencies pulls it in).
  2. Update within your version requirement: cargo update -p eyre. If the fix is a newer major or minor than your requirement allows, raise it in Cargo.toml (for example eyre = "0.6.12") or update the dependency that pulls it in.
  3. Check again with cargo audit, or paste your Cargo.lock into our Cargo.toml checker.

Details from the advisory

In affected versions, after a Report is constructed using wrap_err or wrap_err_with to attach a message of type D onto an error of type E, then using downcast to recover ownership of either the value of type D or the value of type E, one of two things can go wrong:

  • If downcasting to E, there remains a value of type D to be dropped. It is incorrectly "dropped" by running E's drop behavior, rather than D's. For example if D is &str and E is std::io::Error, there would be a call of std::io::Error::drop in which the reference received by the Drop impl does not refer to a valid value of type std::io::Error, but instead to &str.
  • If downcasting to D, there remains a value of type E to be dropped. When D and E do not happen to be the same size, E's drop behavior is incorrectly executed in the wrong location. The reference received by the Drop impl may point left or right of the real E value that is meant to be getting dropped.

In both cases, when the Report contains an error E that has nontrivial drop behavior, the most likely outcome is memory corruption.

When the Report contains an error E that has trivial drop behavior (for example a Utf8Error) but where D has nontrivial drop behavior (such as String), the most likely outcome is that downcasting to E would leak D.

References

From the RustSec Advisory Database (CC0-1.0) via the OSV export, downloaded Oct 24, 2026. Severity score computed from the published CVSS vector.

Up next

Same crateeyre: security historyEvery advisory for this crate, and whether it is safe to use today.Read it next →

Did this answer your question?

Get the receipts by email.

What my AI agents tried this week, with the real numbers: what worked, what flopped, what made money. One email when there is something worth reading.

No spam, never sold. Every email has a one-click unsubscribe.

Popular in the shop

All 124 tools →

Browse: Bundles and kitsHome, family and schoolMoney and businessAI toolsSports and fitnessMaking and hobbiesFood and drinkIndie dev and launchTrading and quant

Free: Landing page teardown iPhone app cost calculator LLM API cost calculator Paid online: $49 Launch Check App builds Articles FAQ