summary refs log tree commit diff
path: root/vm_control
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2020-05-22 01:18:42 +0000
committerAlyssa Ross <hi@alyssa.is>2020-05-22 01:18:42 +0000
commit460406d10bbfaa890d56d616b4610813da63a312 (patch)
tree889af76de40dfca7228a22a38f6b65b9562946f9 /vm_control
parenteb223862bd19827cc15d74b8af75b8c45a79b4d0 (diff)
parent56520c27224579640da9d3e8e4964b0f27dc9bdc (diff)
downloadcrosvm-460406d10bbfaa890d56d616b4610813da63a312.tar
crosvm-460406d10bbfaa890d56d616b4610813da63a312.tar.gz
crosvm-460406d10bbfaa890d56d616b4610813da63a312.tar.bz2
crosvm-460406d10bbfaa890d56d616b4610813da63a312.tar.lz
crosvm-460406d10bbfaa890d56d616b4610813da63a312.tar.xz
crosvm-460406d10bbfaa890d56d616b4610813da63a312.tar.zst
crosvm-460406d10bbfaa890d56d616b4610813da63a312.zip
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'vm_control')
-rw-r--r--vm_control/src/lib.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/vm_control/src/lib.rs b/vm_control/src/lib.rs
index a1d2964..a995f3a 100644
--- a/vm_control/src/lib.rs
+++ b/vm_control/src/lib.rs
@@ -19,7 +19,7 @@ use std::os::unix::io::{AsRawFd, FromRawFd, RawFd};
 use libc::{EINVAL, EIO, ENODEV};
 
 use kvm::{IrqRoute, IrqSource, Vm};
-use msg_socket::{MsgOnSocket, MsgReceiver, MsgResult, MsgSender, MsgSocket};
+use msg_socket::{MsgError, MsgOnSocket, MsgReceiver, MsgResult, MsgSender, MsgSocket};
 use resources::{Alloc, GpuMemoryDesc, MmioType, SystemAllocator};
 use sys_util::{error, Error as SysError, EventFd, GuestAddress, MemoryMapping, MmapError, Result};
 
@@ -53,13 +53,16 @@ impl MsgOnSocket for MaybeOwnedFd {
         1usize
     }
     unsafe fn read_from_buffer(buffer: &[u8], fds: &[RawFd]) -> MsgResult<(Self, usize)> {
-        let (fd, size) = RawFd::read_from_buffer(buffer, fds)?;
-        let file = File::from_raw_fd(fd);
+        let (file, size) = File::read_from_buffer(buffer, fds)?;
         Ok((MaybeOwnedFd::Owned(file), size))
     }
-    fn write_to_buffer(&self, buffer: &mut [u8], fds: &mut [RawFd]) -> MsgResult<usize> {
-        let fd = self.as_raw_fd();
-        fd.write_to_buffer(buffer, fds)
+    fn write_to_buffer(&self, _buffer: &mut [u8], fds: &mut [RawFd]) -> MsgResult<usize> {
+        if fds.is_empty() {
+            return Err(MsgError::WrongFdBufferSize);
+        }
+
+        fds[0] = self.as_raw_fd();
+        Ok(1)
     }
 }