Lucene search

K
osvGoogleOSV:RUSTSEC-2024-0021
HistoryMar 05, 2024 - 12:00 p.m.

Parts of Report are dropped as the wrong type during downcast

2024-03-0512:00:00
Google
osv.dev
6
downcast
error
drop behavior
memory corruption
report
ownership

7 High

AI Score

Confidence

Low

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.

CPENameOperatorVersion
eyrelt0.6.12
eyrege0.6.9

7 High

AI Score

Confidence

Low