Skip to content

Insufficient covariance check makes self_cell unsound

High severity GitHub Reviewed Published Nov 14, 2023 to the GitHub Advisory Database • Updated Nov 14, 2023

Package

cargo self_cell (Rust)

Affected versions

< 0.10.3
>= 1.0.0, < 1.0.2

Patched versions

0.10.3
1.0.2

Description

All public versions prior to 1.02 used an insufficient check to ensure that users correctly marked the dependent type as either covariant or not_covariant. This allowed users to mark a dependent as covariant even though its type was not covariant but invariant, for certain invariant types involving trait object lifetimes. One example for such a dependent type is type Dependent<'a> = RefCell<Box<dyn fmt::Display + 'a>>. Such a type allowed unsound usage in purely safe user code that leads to undefined behavior. The patched versions now produce a compile time error if such a type is marked as covariant.

References

Published to the GitHub Advisory Database Nov 14, 2023
Reviewed Nov 14, 2023
Last updated Nov 14, 2023

Severity

High

Weaknesses

No CWEs

CVE ID

No known CVE

GHSA ID

GHSA-48m6-wm5p-rr6h

Source code

Loading Checking history
See something to contribute? Suggest improvements for this vulnerability.