summary refs log tree commit diff
path: root/x86_64
diff options
context:
space:
mode:
authorZach Reizner <zachr@google.com>2019-08-13 11:20:14 -0700
committerCommit Bot <commit-bot@chromium.org>2019-10-10 02:09:13 +0000
commita8adff0ff14f66570a3aa86f6106b55081526be1 (patch)
tree515ed01d01828a8622bac5203d508da708db5d41 /x86_64
parent0b6f02fea7716ec5752555ea44aafed214b58faa (diff)
downloadcrosvm-a8adff0ff14f66570a3aa86f6106b55081526be1.tar
crosvm-a8adff0ff14f66570a3aa86f6106b55081526be1.tar.gz
crosvm-a8adff0ff14f66570a3aa86f6106b55081526be1.tar.bz2
crosvm-a8adff0ff14f66570a3aa86f6106b55081526be1.tar.lz
crosvm-a8adff0ff14f66570a3aa86f6106b55081526be1.tar.xz
crosvm-a8adff0ff14f66570a3aa86f6106b55081526be1.tar.zst
crosvm-a8adff0ff14f66570a3aa86f6106b55081526be1.zip
devices: jail serial device
This change plumbs the jail throughout the arch specific device creation
process. It also adds a custom callback support for the ProxyDevice so
that the main process can interrupt the child serial process when it has
incoming bytes.

TEST=crosvm run
BUG=None

Change-Id: I6af7d2cb0acbba9bf42eaeeb294cee2bce4a1f36
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1752589
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Tested-by: Zach Reizner <zachr@chromium.org>
Commit-Queue: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'x86_64')
-rw-r--r--x86_64/src/lib.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/x86_64/src/lib.rs b/x86_64/src/lib.rs
index a047b8c..88c91f9 100644
--- a/x86_64/src/lib.rs
+++ b/x86_64/src/lib.rs
@@ -304,6 +304,7 @@ impl arch::LinuxArch for X8664arch {
         mut components: VmComponents,
         split_irqchip: bool,
         serial_parameters: &BTreeMap<u8, SerialParameters>,
+        serial_jail: Option<Minijail>,
         create_devices: F,
     ) -> Result<RunnableLinuxVm>
     where
@@ -366,7 +367,7 @@ impl arch::LinuxArch for X8664arch {
         )?;
 
         let (stdio_serial_num, stdio_serial) =
-            Self::setup_serial_devices(&mut vm, &mut io_bus, &serial_parameters)?;
+            Self::setup_serial_devices(&mut vm, &mut io_bus, serial_parameters, serial_jail)?;
 
         match components.vm_image {
             VmImage::Bios(ref mut bios) => Self::load_bios(&mem, bios)?,
@@ -715,13 +716,19 @@ impl X8664arch {
         vm: &mut Vm,
         io_bus: &mut devices::Bus,
         serial_parameters: &BTreeMap<u8, SerialParameters>,
-    ) -> Result<(Option<u8>, Option<Arc<Mutex<devices::Serial>>>)> {
+        serial_jail: Option<Minijail>,
+    ) -> Result<(Option<u8>, Option<devices::SerialInput>)> {
         let com_evt_1_3 = EventFd::new().map_err(Error::CreateEventFd)?;
         let com_evt_2_4 = EventFd::new().map_err(Error::CreateEventFd)?;
 
-        let (stdio_serial_num, stdio_serial) =
-            arch::add_serial_devices(io_bus, &com_evt_1_3, &com_evt_2_4, &serial_parameters)
-                .map_err(Error::CreateSerialDevices)?;
+        let (stdio_serial_num, stdio_serial) = arch::add_serial_devices(
+            io_bus,
+            &com_evt_1_3,
+            &com_evt_2_4,
+            &serial_parameters,
+            serial_jail,
+        )
+        .map_err(Error::CreateSerialDevices)?;
 
         vm.register_irqfd(&com_evt_1_3, X86_64_SERIAL_1_3_IRQ)
             .map_err(Error::RegisterIrqfd)?;