summary refs log tree commit diff
diff options
context:
space:
mode:
authorpaulhsia <paulhsia@chromium.org>2019-01-18 20:00:36 +0800
committerchrome-bot <chrome-bot@chromium.org>2019-01-22 16:53:13 -0800
commitb6d842fa56f0ccb9e5084d0e06100c53170d46f7 (patch)
tree90d2f4e6df0716b5de13fee77749464459bd2fa0
parent284fcac560ea033f2d10e873cd498bb157c74775 (diff)
downloadcrosvm-b6d842fa56f0ccb9e5084d0e06100c53170d46f7.tar
crosvm-b6d842fa56f0ccb9e5084d0e06100c53170d46f7.tar.gz
crosvm-b6d842fa56f0ccb9e5084d0e06100c53170d46f7.tar.bz2
crosvm-b6d842fa56f0ccb9e5084d0e06100c53170d46f7.tar.lz
crosvm-b6d842fa56f0ccb9e5084d0e06100c53170d46f7.tar.xz
crosvm-b6d842fa56f0ccb9e5084d0e06100c53170d46f7.tar.zst
crosvm-b6d842fa56f0ccb9e5084d0e06100c53170d46f7.zip
crosvm: Support cros-rust version crosvm ebuild
To support eclass migration for crosvm ebuild from crate to cros-rust.
This CL need to be built with cros-rust version crosvm ebuild.

- Upgrage crate cc from 1.0.15 to 1.0.25.
- Change local tempdir version from 0.3.5 to 0.3.7 for ebuild
integration.
- Remove 9s directory since it's moved to platform2.

BUG=chromium:781398
BUG=chromium:907520
TEST=Run $ FEATURES=test emerge-eve crosvm
     in a clean chroot
CQ-DEPEND=CL:1421303

Change-Id: Iab615b555a51f8020e5efae1cc40ac6b54ea87f2
Reviewed-on: https://chromium-review.googlesource.com/1421237
Commit-Ready: Chih-Yang Hsia <paulhsia@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Tested-by: Chih-Yang Hsia <paulhsia@chromium.org>
Reviewed-by: Zach Reizner <zachr@chromium.org>
-rw-r--r--9s/Cargo.toml11
-rw-r--r--9s/src/main.rs210
-rw-r--r--9s/src/vsock.rs197
-rw-r--r--Cargo.lock68
-rw-r--r--Cargo.toml2
-rw-r--r--gpu_display/Cargo.toml2
-rw-r--r--plugin_proto/Cargo.toml2
-rw-r--r--tempdir/Cargo.toml2
-rw-r--r--x86_64/Cargo.toml2
9 files changed, 38 insertions, 458 deletions
diff --git a/9s/Cargo.toml b/9s/Cargo.toml
deleted file mode 100644
index 1aa5e6a..0000000
--- a/9s/Cargo.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-[package]
-name = "9s"
-version = "0.1.0"
-authors = ["The Chromium OS Authors"]
-
-[dependencies]
-assertions = { path = "../assertions" }
-getopts = "=0.2.17"
-libc = "=0.2.44"
-p9 = { path = "../p9" }
-sys_util = { path = "../sys_util" }
diff --git a/9s/src/main.rs b/9s/src/main.rs
deleted file mode 100644
index 39956de..0000000
--- a/9s/src/main.rs
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright 2018 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/// Runs a [9P] server.
-///
-/// [9P]: http://man.cat-v.org/plan_9/5/0intro
-extern crate assertions;
-extern crate getopts;
-extern crate libc;
-extern crate p9;
-#[macro_use]
-extern crate sys_util;
-
-mod vsock;
-
-use std::fmt;
-use std::io::{self, BufReader, BufWriter};
-use std::net;
-use std::num::ParseIntError;
-use std::os::raw::c_uint;
-use std::result;
-use std::str::FromStr;
-use std::string;
-use std::sync::Arc;
-use std::thread;
-
-use sys_util::syslog;
-
-use vsock::*;
-
-const DEFAULT_BUFFER_SIZE: usize = 8192;
-
-// Address family identifiers.
-const VSOCK: &'static str = "vsock:";
-const UNIX: &'static str = "unix:";
-
-// Usage for this program.
-const USAGE: &'static str = "9s [options] {vsock:<port>|unix:<path>|<ip>:<port>}";
-
-enum ListenAddress {
-    Net(net::SocketAddr),
-    Unix(String),
-    Vsock(c_uint),
-}
-
-#[derive(Debug)]
-enum ParseAddressError {
-    MissingUnixPath,
-    MissingVsockPort,
-    Net(net::AddrParseError),
-    Unix(string::ParseError),
-    Vsock(ParseIntError),
-}
-
-impl fmt::Display for ParseAddressError {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        match self {
-            &ParseAddressError::MissingUnixPath => write!(f, "missing unix path"),
-            &ParseAddressError::MissingVsockPort => write!(f, "missing vsock port number"),
-            &ParseAddressError::Net(ref e) => e.fmt(f),
-            &ParseAddressError::Unix(ref e) => write!(f, "invalid unix path: {}", e),
-            &ParseAddressError::Vsock(ref e) => write!(f, "invalid vsock port number: {}", e),
-        }
-    }
-}
-
-impl FromStr for ListenAddress {
-    type Err = ParseAddressError;
-
-    fn from_str(s: &str) -> result::Result<Self, Self::Err> {
-        if s.starts_with(VSOCK) {
-            if s.len() > VSOCK.len() {
-                Ok(ListenAddress::Vsock(
-                    s[VSOCK.len()..].parse().map_err(ParseAddressError::Vsock)?,
-                ))
-            } else {
-                Err(ParseAddressError::MissingVsockPort)
-            }
-        } else if s.starts_with(UNIX) {
-            if s.len() > UNIX.len() {
-                Ok(ListenAddress::Unix(
-                    s[UNIX.len()..].parse().map_err(ParseAddressError::Unix)?,
-                ))
-            } else {
-                Err(ParseAddressError::MissingUnixPath)
-            }
-        } else {
-            Ok(ListenAddress::Net(
-                s.parse().map_err(ParseAddressError::Net)?,
-            ))
-        }
-    }
-}
-
-#[derive(Debug)]
-enum Error {
-    Address(ParseAddressError),
-    Argument(getopts::Fail),
-    Cid(ParseIntError),
-    IO(io::Error),
-    MissingAcceptCid,
-    Syslog(syslog::Error),
-}
-
-impl fmt::Display for Error {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        match self {
-            &Error::Address(ref e) => e.fmt(f),
-            &Error::Argument(ref e) => e.fmt(f),
-            &Error::Cid(ref e) => write!(f, "invalid cid value: {}", e),
-            &Error::IO(ref e) => e.fmt(f),
-            &Error::MissingAcceptCid => write!(f, "`accept_cid` is required for vsock servers"),
-            &Error::Syslog(ref e) => write!(f, "failed to initialize syslog: {:?}", e),
-        }
-    }
-}
-
-type Result<T> = result::Result<T, Error>;
-
-fn handle_client<R: io::Read, W: io::Write>(
-    root: Arc<str>,
-    mut reader: R,
-    mut writer: W,
-) -> io::Result<()> {
-    let mut server = p9::Server::new(&*root);
-
-    loop {
-        server.handle_message(&mut reader, &mut writer)?;
-    }
-}
-
-fn run_vsock_server(root: Arc<str>, port: c_uint, accept_cid: c_uint) -> io::Result<()> {
-    let listener = VsockListener::bind(port)?;
-
-    loop {
-        let (stream, peer) = listener.accept()?;
-
-        if accept_cid != peer.cid {
-            warn!("ignoring connection from {}:{}", peer.cid, peer.port);
-            continue;
-        }
-
-        info!("accepted connection from {}:{}", peer.cid, peer.port);
-        let reader = BufReader::with_capacity(DEFAULT_BUFFER_SIZE, stream.try_clone()?);
-        let writer = BufWriter::with_capacity(DEFAULT_BUFFER_SIZE, stream);
-        let server_root = root.clone();
-        thread::spawn(move || {
-            if let Err(e) = handle_client(server_root, reader, writer) {
-                error!(
-                    "error while handling client {}:{}: {}",
-                    peer.cid, peer.port, e
-                );
-            }
-        });
-    }
-}
-
-fn main() -> Result<()> {
-    let mut opts = getopts::Options::new();
-    opts.optopt(
-        "",
-        "accept_cid",
-        "only accept connections from this vsock context id",
-        "CID",
-    );
-    opts.optopt(
-        "r",
-        "root",
-        "root directory for clients (default is \"/\")",
-        "PATH",
-    );
-    opts.optflag("h", "help", "print this help menu");
-
-    let matches = opts
-        .parse(std::env::args_os().skip(1))
-        .map_err(Error::Argument)?;
-
-    if matches.opt_present("h") || matches.free.len() == 0 {
-        print!("{}", opts.usage(USAGE));
-        return Ok(());
-    }
-
-    syslog::init().map_err(Error::Syslog)?;
-
-    let root: Arc<str> = Arc::from(matches.opt_str("r").unwrap_or_else(|| "/".into()));
-
-    // We already checked that |matches.free| has at least one item.
-    match matches.free[0]
-        .parse::<ListenAddress>()
-        .map_err(Error::Address)?
-    {
-        ListenAddress::Vsock(port) => {
-            let accept_cid = if let Some(cid) = matches.opt_str("accept_cid") {
-                cid.parse::<c_uint>().map_err(Error::Cid)
-            } else {
-                Err(Error::MissingAcceptCid)
-            }?;
-            run_vsock_server(root, port, accept_cid).map_err(Error::IO)?;
-        }
-        ListenAddress::Net(_) => {
-            error!("Network server unimplemented");
-        }
-        ListenAddress::Unix(_) => {
-            error!("Unix server unimplemented");
-        }
-    }
-
-    Ok(())
-}
diff --git a/9s/src/vsock.rs b/9s/src/vsock.rs
deleted file mode 100644
index 64911c0..0000000
--- a/9s/src/vsock.rs
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright 2018 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/// Support for virtual sockets.
-use std::io;
-use std::mem::{self, size_of};
-use std::os::raw::{c_int, c_uchar, c_uint, c_ushort};
-use std::os::unix::io::RawFd;
-
-use assertions::const_assert;
-use libc::{self, c_void, sa_family_t, size_t, sockaddr, socklen_t};
-
-// The domain for vsock sockets.
-const AF_VSOCK: sa_family_t = 40;
-
-// Vsock equivalent of INADDR_ANY.  Indicates the context id of the current endpoint.
-const VMADDR_CID_ANY: c_uint = c_uint::max_value();
-
-// The number of bytes of padding to be added to the sockaddr_vm struct.  Taken directly
-// from linux/vm_sockets.h.
-const PADDING: usize = size_of::<sockaddr>()
-    - size_of::<sa_family_t>()
-    - size_of::<c_ushort>()
-    - (2 * size_of::<c_uint>());
-
-#[repr(C)]
-struct sockaddr_vm {
-    svm_family: sa_family_t,
-    svm_reserved1: c_ushort,
-    svm_port: c_uint,
-    svm_cid: c_uint,
-    svm_zero: [c_uchar; PADDING],
-}
-
-/// An address associated with a virtual socket.
-pub struct SocketAddr {
-    pub cid: c_uint,
-    pub port: c_uint,
-}
-
-/// A virtual stream socket.
-pub struct VsockStream {
-    fd: RawFd,
-}
-
-impl VsockStream {
-    pub fn try_clone(&self) -> io::Result<VsockStream> {
-        // Safe because this doesn't modify any memory and we check the return value.
-        let dup_fd = unsafe { libc::fcntl(self.fd, libc::F_DUPFD_CLOEXEC, 0) };
-        if dup_fd < 0 {
-            return Err(io::Error::last_os_error());
-        }
-
-        Ok(VsockStream { fd: dup_fd })
-    }
-}
-
-impl io::Read for VsockStream {
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        // Safe because this will only modify the contents of |buf| and we check the return value.
-        let ret = unsafe {
-            handle_eintr_errno!(libc::read(
-                self.fd,
-                buf as *mut [u8] as *mut c_void,
-                buf.len() as size_t
-            ))
-        };
-        if ret < 0 {
-            return Err(io::Error::last_os_error());
-        }
-
-        Ok(ret as usize)
-    }
-}
-
-impl io::Write for VsockStream {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        // Safe because this doesn't modify any memory and we check the return value.
-        let ret = unsafe {
-            handle_eintr_errno!(libc::write(
-                self.fd,
-                buf as *const [u8] as *const c_void,
-                buf.len() as size_t,
-            ))
-        };
-        if ret < 0 {
-            return Err(io::Error::last_os_error());
-        }
-
-        Ok(ret as usize)
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        // No buffered data so nothing to do.
-        Ok(())
-    }
-}
-
-impl Drop for VsockStream {
-    fn drop(&mut self) {
-        // Safe because this doesn't modify any memory and we are the only
-        // owner of the file descriptor.
-        unsafe { libc::close(self.fd) };
-    }
-}
-
-/// Represents a virtual socket server.
-pub struct VsockListener {
-    fd: RawFd,
-}
-
-impl VsockListener {
-    /// Creates a new `VsockListener` bound to the specified port on the current virtual socket
-    /// endpoint.
-    pub fn bind(port: c_uint) -> io::Result<VsockListener> {
-        const_assert!(size_of::<sockaddr_vm>() == size_of::<sockaddr>());
-
-        // Safe because this doesn't modify any memory and we check the return value.
-        let fd: RawFd =
-            unsafe { libc::socket(AF_VSOCK as c_int, libc::SOCK_STREAM | libc::SOCK_CLOEXEC, 0) };
-        if fd < 0 {
-            return Err(io::Error::last_os_error());
-        }
-
-        // Safe because we are zero-initializing a struct with only integer fields.
-        let mut svm: sockaddr_vm = unsafe { mem::zeroed() };
-        svm.svm_family = AF_VSOCK;
-        svm.svm_cid = VMADDR_CID_ANY;
-        svm.svm_port = port;
-
-        // Safe because this doesn't modify any memory and we check the return value.
-        let ret = unsafe {
-            libc::bind(
-                fd,
-                &svm as *const sockaddr_vm as *const sockaddr,
-                size_of::<sockaddr_vm>() as socklen_t,
-            )
-        };
-        if ret < 0 {
-            return Err(io::Error::last_os_error());
-        }
-
-        // Safe because this doesn't modify any memory and we check the return value.
-        let ret = unsafe { libc::listen(fd, 1) };
-        if ret < 0 {
-            return Err(io::Error::last_os_error());
-        }
-
-        Ok(VsockListener { fd })
-    }
-
-    /// Accepts a new incoming connection on this listener.  Blocks the calling thread until a
-    /// new connection is established.  When established, returns the corresponding `VsockStream`
-    /// and the remote peer's address.
-    pub fn accept(&self) -> io::Result<(VsockStream, SocketAddr)> {
-        // Safe because we are zero-initializing a struct with only integer fields.
-        let mut svm: sockaddr_vm = unsafe { mem::zeroed() };
-
-        // Safe because this will only modify |svm| and we check the return value.
-        let mut socklen: socklen_t = size_of::<sockaddr_vm>() as socklen_t;
-        let fd = unsafe {
-            libc::accept4(
-                self.fd,
-                &mut svm as *mut sockaddr_vm as *mut sockaddr,
-                &mut socklen as *mut socklen_t,
-                libc::SOCK_CLOEXEC,
-            )
-        };
-        if fd < 0 {
-            return Err(io::Error::last_os_error());
-        }
-
-        if svm.svm_family != AF_VSOCK {
-            return Err(io::Error::new(
-                io::ErrorKind::InvalidData,
-                format!("unexpected address family: {}", svm.svm_family),
-            ));
-        }
-
-        Ok((
-            VsockStream { fd },
-            SocketAddr {
-                cid: svm.svm_cid,
-                port: svm.svm_port,
-            },
-        ))
-    }
-}
-
-impl Drop for VsockListener {
-    fn drop(&mut self) {
-        // Safe because this doesn't modify any memory and we are the only
-        // owner of the file descriptor.
-        unsafe { libc::close(self.fd) };
-    }
-}
diff --git a/Cargo.lock b/Cargo.lock
index 95e5cb3..d43e449 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,15 +1,4 @@
 [[package]]
-name = "9s"
-version = "0.1.0"
-dependencies = [
- "assertions 0.1.0",
- "getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
- "p9 0.1.0",
- "sys_util 0.1.0",
-]
-
-[[package]]
 name = "aarch64"
 version = "0.1.0"
 dependencies = [
@@ -56,7 +45,7 @@ dependencies = [
 name = "bit_field_derive"
 version = "0.1.0"
 dependencies = [
- "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -68,12 +57,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "cc"
-version = "1.0.15"
+version = "1.0.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "cfg-if"
-version = "0.1.2"
+version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -157,8 +146,11 @@ dependencies = [
 
 [[package]]
 name = "getopts"
-version = "0.2.17"
+version = "0.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
 
 [[package]]
 name = "gpu_buffer"
@@ -172,7 +164,7 @@ dependencies = [
 name = "gpu_display"
 version = "0.1.0"
 dependencies = [
- "cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
  "data_model 0.1.0",
  "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  "sys_util 0.1.0",
@@ -234,17 +226,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "log"
-version = "0.4.1"
+version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "msg_on_socket_derive"
 version = "0.1.0"
 dependencies = [
- "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -291,7 +283,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 name = "plugin_proto"
 version = "0.16.0"
 dependencies = [
- "cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
  "kvm_sys 0.1.0",
  "protobuf 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "protoc-rust 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -301,14 +293,14 @@ dependencies = [
 name = "poll_token_derive"
 version = "0.1.0"
 dependencies = [
- "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "0.4.24"
+version = "0.4.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -324,7 +316,7 @@ name = "protoc"
 version = "1.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -334,7 +326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "protobuf 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "protoc 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "tempdir 0.3.5",
+ "tempdir 0.3.7",
 ]
 
 [[package]]
@@ -350,7 +342,7 @@ dependencies = [
 name = "qcow_utils"
 version = "0.1.0"
 dependencies = [
- "getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  "qcow 0.1.0",
  "sys_util 0.1.0",
@@ -361,7 +353,7 @@ name = "quote"
 version = "0.6.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -383,7 +375,7 @@ name = "syn"
 version = "0.15.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -409,12 +401,17 @@ version = "0.1.0"
 
 [[package]]
 name = "tempdir"
-version = "0.3.5"
+version = "0.3.7"
 dependencies = [
  "rand_ish 0.1.0",
 ]
 
 [[package]]
+name = "unicode-width"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
 name = "unicode-xid"
 version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -463,7 +460,7 @@ dependencies = [
 name = "wire_format_derive"
 version = "0.1.0"
 dependencies = [
- "proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
@@ -474,7 +471,7 @@ version = "0.1.0"
 dependencies = [
  "arch 0.1.0",
  "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
  "data_model 0.1.0",
  "devices 0.1.0",
  "io_jail 0.1.0",
@@ -490,16 +487,17 @@ dependencies = [
 
 [metadata]
 "checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d"
-"checksum cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0ebb87d1116151416c0cf66a0e3fb6430cccd120fd6300794b4dfaa050ac40ba"
-"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
-"checksum getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "b900c08c1939860ce8b54dc6a89e26e00c04c380fd0e09796799bd7f12861e05"
+"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
+"checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3"
+"checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797"
 "checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311"
-"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2"
+"checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f"
 "checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f"
-"checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09"
+"checksum proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ab2fc21ba78ac73e4ff6b3818ece00be4e175ffbef4d0a717d978b48b24150c4"
 "checksum protobuf 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bec26e67194b7d991908145fdf21b7cae8b08423d96dcb9e860cd31f854b9506"
 "checksum protoc 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5379c34ea2f9c69b99e6f25f6d0e6619876195ae7a3dcaf69f66bdb6c2e4dceb"
 "checksum protoc-rust 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e211a7f56b2d020a59d483f652cfdfa6fd42e37bf544c0231e373807aa316c45"
 "checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c"
 "checksum syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)" = "816b7af21405b011a23554ea2dc3f6576dc86ca557047c34098c1d741f10f823"
+"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
 "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
diff --git a/Cargo.toml b/Cargo.toml
index 1521d4f..d255e9d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,7 +9,7 @@ panic = 'abort'
 overflow-checks = true
 
 [workspace]
-members = ["9s", "qcow_utils"]
+members = ["qcow_utils"]
 exclude = [
     "assertions",
     "data_model",
diff --git a/gpu_display/Cargo.toml b/gpu_display/Cargo.toml
index fbd16ff..403bc9e 100644
--- a/gpu_display/Cargo.toml
+++ b/gpu_display/Cargo.toml
@@ -9,4 +9,4 @@ libc = "*"
 sys_util = { path = "../sys_util" }
 
 [build-dependencies]
-cc = "=1.0.15"
+cc = "=1.0.25"
diff --git a/plugin_proto/Cargo.toml b/plugin_proto/Cargo.toml
index db898c7..5f1c771 100644
--- a/plugin_proto/Cargo.toml
+++ b/plugin_proto/Cargo.toml
@@ -9,5 +9,5 @@ protobuf = "*"
 kvm_sys = { path = "../kvm_sys" }
 
 [build-dependencies]
-cc = "=1.0.15"
+cc = "=1.0.25"
 protoc-rust = "=1.4.3"
diff --git a/tempdir/Cargo.toml b/tempdir/Cargo.toml
index 9a3bed9..68fb80a 100644
--- a/tempdir/Cargo.toml
+++ b/tempdir/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "tempdir"
-version = "0.3.5"
+version = "0.3.7"
 authors = ["The Chromium OS Authors"]
 
 [dependencies]
diff --git a/x86_64/Cargo.toml b/x86_64/Cargo.toml
index 64443c4..521573b 100644
--- a/x86_64/Cargo.toml
+++ b/x86_64/Cargo.toml
@@ -20,5 +20,5 @@ libc = "*"
 byteorder = "*"
 
 [build-dependencies]
-cc = "=1.0.15"
+cc = "=1.0.25"