summary refs log tree commit diff
path: root/devices
diff options
context:
space:
mode:
authorJingkui Wang <jkwang@google.com>2018-11-08 10:47:42 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-12-25 17:55:07 -0800
commitf6752e7927b3a40f01d45eb4e81ded3a63682fd0 (patch)
treea4db47caac849a5856de83bb6a354e3da775c9d8 /devices
parent7df5a0ef1a23542b0cc7db7797b8b287eaa05699 (diff)
downloadcrosvm-f6752e7927b3a40f01d45eb4e81ded3a63682fd0.tar
crosvm-f6752e7927b3a40f01d45eb4e81ded3a63682fd0.tar.gz
crosvm-f6752e7927b3a40f01d45eb4e81ded3a63682fd0.tar.bz2
crosvm-f6752e7927b3a40f01d45eb4e81ded3a63682fd0.tar.lz
crosvm-f6752e7927b3a40f01d45eb4e81ded3a63682fd0.tar.xz
crosvm-f6752e7927b3a40f01d45eb4e81ded3a63682fd0.tar.zst
crosvm-f6752e7927b3a40f01d45eb4e81ded3a63682fd0.zip
devices: add on_sandboxed
On sandboxed will be invoked when the device is sandboxed. Device
implementation could do initialization here. It does not need to return
fd opened here to keep fds.

BUG=None
TEST=local build and run

Change-Id: I42c2b3cae3a87dd54f02e77b8cd10766309a0770
Reviewed-on: https://chromium-review.googlesource.com/1327513
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Jingkui Wang <jkwang@google.com>
Reviewed-by: David Tolnay <dtolnay@chromium.org>
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'devices')
-rw-r--r--devices/src/bus.rs2
-rw-r--r--devices/src/pci/pci_device.rs10
-rw-r--r--devices/src/proxy.rs1
3 files changed, 13 insertions, 0 deletions
diff --git a/devices/src/bus.rs b/devices/src/bus.rs
index 8124d87..5eb09a2 100644
--- a/devices/src/bus.rs
+++ b/devices/src/bus.rs
@@ -30,6 +30,8 @@ pub trait BusDevice: Send {
     fn config_register_read(&self, reg_idx: usize) -> u32 {
         0
     }
+    /// Invoked when the device is sandboxed.
+    fn on_sandboxed(&mut self) {}
 }
 
 #[derive(Debug)]
diff --git a/devices/src/pci/pci_device.rs b/devices/src/pci/pci_device.rs
index e5132d1..4d3a46e 100644
--- a/devices/src/pci/pci_device.rs
+++ b/devices/src/pci/pci_device.rs
@@ -61,6 +61,8 @@ pub trait PciDevice: Send {
     /// * `addr` - The guest address inside the BAR.
     /// * `data` - The data to write.
     fn write_bar(&mut self, addr: u64, data: &[u8]);
+    /// Invoked when the device is sandboxed.
+    fn on_device_sandboxed(&mut self) {}
 }
 
 impl<T: PciDevice> BusDevice for T {
@@ -93,6 +95,10 @@ impl<T: PciDevice> BusDevice for T {
     fn config_register_read(&self, reg_idx: usize) -> u32 {
         self.config_registers().read_reg(reg_idx)
     }
+
+    fn on_sandboxed(&mut self) {
+        self.on_device_sandboxed();
+    }
 }
 
 impl<T: PciDevice + ?Sized> PciDevice for Box<T> {
@@ -126,4 +132,8 @@ impl<T: PciDevice + ?Sized> PciDevice for Box<T> {
     fn write_bar(&mut self, addr: u64, data: &[u8]) {
         (**self).write_bar(addr, data)
     }
+    /// Invoked when the device is sandboxed.
+    fn on_device_sandboxed(&mut self) {
+        (**self).on_device_sandboxed()
+    }
 }
diff --git a/devices/src/proxy.rs b/devices/src/proxy.rs
index 5867e58..0b60736 100644
--- a/devices/src/proxy.rs
+++ b/devices/src/proxy.rs
@@ -143,6 +143,7 @@ impl ProxyDevice {
         let pid = unsafe {
             match jail.fork(Some(&keep_fds)).map_err(Error::ForkingJail)? {
                 0 => {
+                    device.on_sandboxed();
                     child_proc(child_sock, &mut device);
                     // ! Never returns
                     process::exit(0);