summary refs log tree commit diff
path: root/src/plugin/mod.rs
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2020-05-06 12:37:30 -0700
committerCommit Bot <commit-bot@chromium.org>2020-05-07 22:59:35 +0000
commita1c0e3c680c44ae4a949744b27f3cf0f7ea77939 (patch)
tree7300cd789e9ce31f75672d9ad03b006732ed4417 /src/plugin/mod.rs
parenta7237949da6d365957a04f99dc0b50c1ca1bed9b (diff)
downloadcrosvm-a1c0e3c680c44ae4a949744b27f3cf0f7ea77939.tar
crosvm-a1c0e3c680c44ae4a949744b27f3cf0f7ea77939.tar.gz
crosvm-a1c0e3c680c44ae4a949744b27f3cf0f7ea77939.tar.bz2
crosvm-a1c0e3c680c44ae4a949744b27f3cf0f7ea77939.tar.lz
crosvm-a1c0e3c680c44ae4a949744b27f3cf0f7ea77939.tar.xz
crosvm-a1c0e3c680c44ae4a949744b27f3cf0f7ea77939.tar.zst
crosvm-a1c0e3c680c44ae4a949744b27f3cf0f7ea77939.zip
remove instantes of using IntoRawFd in unsafe blocks
The trait IntoRawFd isn't marked unsafe, but its documentation says that
an impl must return a uniquely owned RawFd. Some code blocks depended on
that behavior to ensure safety with the unsafe File::from_raw_fd, but
this leads to a soundness hole where a nominally safe impl of IntoRawFd
can lead to unsafety in functions that had been left as safe.

This change sidesteps the issue by not using IntoRawFd, and using only
safe conversions instead.

BUG=None
TEST=cargo build --features='wl-dmabuf plugin'

Change-Id: I9b357e5592be21189fb96e343823dd63000aac30
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2185580
Reviewed-by: Zach Reizner <zachr@chromium.org>
Tested-by: Zach Reizner <zachr@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Zach Reizner <zachr@chromium.org>
Auto-Submit: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'src/plugin/mod.rs')
-rw-r--r--src/plugin/mod.rs6
1 files changed, 1 insertions, 5 deletions
diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs
index ae7e19c..470d5f0 100644
--- a/src/plugin/mod.rs
+++ b/src/plugin/mod.rs
@@ -8,7 +8,7 @@ mod vcpu;
 use std::fmt::{self, Display};
 use std::fs::File;
 use std::io;
-use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd};
+use std::os::unix::io::{AsRawFd, FromRawFd};
 use std::os::unix::net::UnixDatagram;
 use std::path::Path;
 use std::result;
@@ -181,10 +181,6 @@ impl Display for Error {
 
 type Result<T> = result::Result<T, Error>;
 
-fn downcast_file<F: IntoRawFd>(f: F) -> File {
-    unsafe { File::from_raw_fd(f.into_raw_fd()) }
-}
-
 fn new_seqpacket_pair() -> SysResult<(UnixDatagram, UnixDatagram)> {
     let mut fds = [0, 0];
     unsafe {