diff --git a/src/agent/src/device.rs b/src/agent/src/device.rs index ad181141cd..31c5c120bc 100644 --- a/src/agent/src/device.rs +++ b/src/agent/src/device.rs @@ -596,7 +596,10 @@ fn update_spec_devices(spec: &mut Spec, mut updates: HashMap<&str, DevUpdate>) - // variables to be correct for the VM instead of the host. It is // given a map of (host address => guest address) #[instrument] -fn update_env_pci(env: &mut [String], pcimap: &HashMap) -> Result<()> { +pub fn update_env_pci( + env: &mut [String], + pcimap: &HashMap, +) -> Result<()> { for envvar in env { let eqpos = envvar .find('=') @@ -793,6 +796,9 @@ pub async fn add_devices( } } + if let Some(process) = spec.process.as_mut() { + update_env_pci(&mut process.env, &sandbox.lock().await.pcimap)? + } update_spec_devices(spec, dev_updates) } diff --git a/src/agent/src/rpc.rs b/src/agent/src/rpc.rs index 444be723cf..276746b9fe 100644 --- a/src/agent/src/rpc.rs +++ b/src/agent/src/rpc.rs @@ -43,7 +43,9 @@ use nix::sys::stat; use nix::unistd::{self, Pid}; use rustjail::process::ProcessOperations; -use crate::device::{add_devices, get_virtio_blk_pci_device_name, update_device_cgroup}; +use crate::device::{ + add_devices, get_virtio_blk_pci_device_name, update_device_cgroup, update_env_pci, +}; use crate::linux_abi::*; use crate::metrics::get_metrics; use crate::mount::{add_storages, baremount, remove_mounts, STORAGE_HANDLER_LIST}; @@ -359,11 +361,14 @@ impl AgentService { let s = self.sandbox.clone(); let mut sandbox = s.lock().await; - let process = req + let mut process = req .process .into_option() .ok_or_else(|| anyhow!(nix::Error::EINVAL))?; + // Apply any necessary corrections for PCI addresses + update_env_pci(&mut process.Env, &sandbox.pcimap)?; + let pipe_size = AGENT_CONFIG.read().await.container_pipe_size; let ocip = rustjail::process_grpc_to_oci(&process); let p = Process::new(&sl!(), &ocip, exec_id.as_str(), false, pipe_size)?;