-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
reading on uninitialized buffer can cause UB (impl<R> BufRead for GreedyAccessReader<R>
)
#1
Comments
Hello, and thank you for the detailed report! It is a bit surprising to find out that the documentation for Although this is a very low-traffic crate, I will take the necessary measures to fix this and release a patched version. 👍 |
- Implementations of Read still can try to read `buf` on `read`, even though they shouldn't - also derive Debug and Clone for GreedyAccessReader - all uses of unsafe were removed
Thank you for the heads up @JOE1994. v0.1.1 is out with the fix, and v0.1.0 has been yanked from crates.io. |
Hello 🦀 ,
we (Rust group @sslab-gatech) found a memory-safety/soundness issue in this crate while scanning Rust code on crates.io for potential vulnerabilities.
Issue Description
bra-rs/src/greedy.rs
Lines 190 to 225 in 2b3c455
GreedyAccessReader::fill_buf
method creates an uninitialized buffer and passes it to user-providedRead
implementation (self.inner.read(buf)
). This is unsound, because it allows safe Rust code to exhibit an undefined behavior (read from uninitialized memory).This part from the
Read
trait documentation explains the issue:Suggested Fix
It is safe to zero-initialize the newly allocated
u8
buffer beforeread()
, in order to prevent user-providedRead
from reading old contents of the newly allocated heap memory.The version available on
Crates.io
seems to be different from the latest master branch of this repo,but the same issue exists in
GreedyBufReader::fill_buf()
(bra = "0.1.0").Thank you for checking out this issue 👍
The text was updated successfully, but these errors were encountered: