vmm: Add valid FDs for TAP devices to 'VmConfig::preserved_fds'

In this way, valid FDs for TAP devices will be closed when the holding
VmConfig instance is destroyed.

Signed-off-by: Bo Chen <chen.bo@intel.com>
This commit is contained in:
Bo Chen 2023-04-14 17:47:58 -07:00 committed by Bo Chen
parent 269844da73
commit 2724edd1e5

View File

@ -2406,26 +2406,31 @@ impl DeviceManager {
.map_err(DeviceManagerError::CreateVirtioNet)?, .map_err(DeviceManagerError::CreateVirtioNet)?,
)) ))
} else if let Some(fds) = &net_cfg.fds { } else if let Some(fds) = &net_cfg.fds {
Arc::new(Mutex::new( let net = virtio_devices::Net::from_tap_fds(
virtio_devices::Net::from_tap_fds( id.clone(),
id.clone(), fds,
fds, Some(net_cfg.mac),
Some(net_cfg.mac), net_cfg.mtu,
net_cfg.mtu, self.force_iommu | net_cfg.iommu,
self.force_iommu | net_cfg.iommu, net_cfg.queue_size,
net_cfg.queue_size, self.seccomp_action.clone(),
self.seccomp_action.clone(), net_cfg.rate_limiter_config,
net_cfg.rate_limiter_config, self.exit_evt
self.exit_evt .try_clone()
.try_clone() .map_err(DeviceManagerError::EventFd)?,
.map_err(DeviceManagerError::EventFd)?, state,
state, net_cfg.offload_tso,
net_cfg.offload_tso, net_cfg.offload_ufo,
net_cfg.offload_ufo, net_cfg.offload_csum,
net_cfg.offload_csum, )
) .map_err(DeviceManagerError::CreateVirtioNet)?;
.map_err(DeviceManagerError::CreateVirtioNet)?,
)) // SAFETY: 'fds' are valid because TAP devices are created successfully
unsafe {
self.config.lock().unwrap().add_preserved_fds(fds.clone());
}
Arc::new(Mutex::new(net))
} else { } else {
Arc::new(Mutex::new( Arc::new(Mutex::new(
virtio_devices::Net::new( virtio_devices::Net::new(