Use preserved_fds rather than fd_mappings.
Test: atest VirtualizationTestCases
Change-Id: Ie5d9bc99de8ff2f4682441ab3753336ba1014cc9
diff --git a/virtualizationservice/src/aidl.rs b/virtualizationservice/src/aidl.rs
index b1b0b38..ce9a080 100644
--- a/virtualizationservice/src/aidl.rs
+++ b/virtualizationservice/src/aidl.rs
@@ -28,7 +28,6 @@
use android_system_virtualizationservice::binder::{
self, BinderFeatures, ExceptionCode, Interface, ParcelFileDescriptor, Status, Strong, ThreadState,
};
-use command_fds::FdMapping;
use disk::QcowFile;
use log::{debug, error, warn};
use std::convert::TryInto;
@@ -117,17 +116,12 @@
params: config.params.to_owned(),
protected: config.protected_vm,
};
- let composite_disk_mappings: Vec<_> = indirect_files
- .iter()
- .map(|file| {
- let fd = file.as_raw_fd();
- FdMapping { parent_fd: fd, child_fd: fd }
- })
- .collect();
+ let composite_disk_fds: Vec<_> =
+ indirect_files.iter().map(|file| file.as_raw_fd()).collect();
let instance = VmInstance::start(
&crosvm_config,
log_fd,
- &composite_disk_mappings,
+ &composite_disk_fds,
temporary_directory,
requester_uid,
requester_sid,
diff --git a/virtualizationservice/src/crosvm.rs b/virtualizationservice/src/crosvm.rs
index 669c631..ae8388a 100644
--- a/virtualizationservice/src/crosvm.rs
+++ b/virtualizationservice/src/crosvm.rs
@@ -17,11 +17,11 @@
use crate::aidl::VirtualMachineCallbacks;
use crate::Cid;
use anyhow::{bail, Error};
-use command_fds::{CommandFdExt, FdMapping};
+use command_fds::CommandFdExt;
use log::{debug, error, info};
use shared_child::SharedChild;
use std::fs::{remove_dir_all, File};
-use std::os::unix::io::AsRawFd;
+use std::os::unix::io::{AsRawFd, RawFd};
use std::path::PathBuf;
use std::process::Command;
use std::sync::atomic::{AtomicBool, Ordering};
@@ -102,13 +102,13 @@
pub fn start(
config: &CrosvmConfig,
log_fd: Option<File>,
- composite_disk_mappings: &[FdMapping],
+ composite_disk_fds: &[RawFd],
temporary_directory: PathBuf,
requester_uid: u32,
requester_sid: String,
requester_debug_pid: i32,
) -> Result<Arc<VmInstance>, Error> {
- let child = run_vm(config, log_fd, composite_disk_mappings)?;
+ let child = run_vm(config, log_fd, composite_disk_fds)?;
let instance = Arc::new(VmInstance::new(
child,
config.cid,
@@ -161,7 +161,7 @@
fn run_vm(
config: &CrosvmConfig,
log_fd: Option<File>,
- composite_disk_mappings: &[FdMapping],
+ composite_disk_fds: &[RawFd],
) -> Result<SharedChild, Error> {
validate_config(config)?;
@@ -181,14 +181,14 @@
}
// Keep track of what file descriptors should be mapped to the crosvm process.
- let mut fd_mappings = composite_disk_mappings.to_vec();
+ let mut preserved_fds = composite_disk_fds.to_vec();
if let Some(bootloader) = &config.bootloader {
- command.arg("--bios").arg(add_fd_mapping(&mut fd_mappings, bootloader));
+ command.arg("--bios").arg(add_preserved_fd(&mut preserved_fds, bootloader));
}
if let Some(initrd) = &config.initrd {
- command.arg("--initrd").arg(add_fd_mapping(&mut fd_mappings, initrd));
+ command.arg("--initrd").arg(add_preserved_fd(&mut preserved_fds, initrd));
}
if let Some(params) = &config.params {
@@ -198,15 +198,15 @@
for disk in &config.disks {
command
.arg(if disk.writable { "--rwdisk" } else { "--disk" })
- .arg(add_fd_mapping(&mut fd_mappings, &disk.image));
+ .arg(add_preserved_fd(&mut preserved_fds, &disk.image));
}
if let Some(kernel) = &config.kernel {
- command.arg(add_fd_mapping(&mut fd_mappings, kernel));
+ command.arg(add_preserved_fd(&mut preserved_fds, kernel));
}
- debug!("Setting mappings {:?}", fd_mappings);
- command.fd_mappings(fd_mappings)?;
+ debug!("Preserving FDs {:?}", preserved_fds);
+ command.preserved_fds(preserved_fds);
info!("Running {:?}", command);
let result = SharedChild::spawn(&mut command)?;
@@ -224,10 +224,10 @@
Ok(())
}
-/// Adds a mapping for `file` to `fd_mappings`, and returns a string of the form "/proc/self/fd/N"
-/// where N is the file descriptor for the child process.
-fn add_fd_mapping(fd_mappings: &mut Vec<FdMapping>, file: &File) -> String {
+/// Adds the file descriptor for `file` to `preserved_fds`, and returns a string of the form
+/// "/proc/self/fd/N" where N is the file descriptor.
+fn add_preserved_fd(preserved_fds: &mut Vec<RawFd>, file: &File) -> String {
let fd = file.as_raw_fd();
- fd_mappings.push(FdMapping { parent_fd: fd, child_fd: fd });
+ preserved_fds.push(fd);
format!("/proc/self/fd/{}", fd)
}