diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index cef1a4c7b..6c36442d2 100755 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -25,7 +25,9 @@ extern crate vm_allocator; extern crate vm_memory; extern crate vm_virtio; -use crate::config::{DeviceConfig, DiskConfig, HotplugMethod, NetConfig, PmemConfig, VmConfig}; +use crate::config::{ + DeviceConfig, DiskConfig, HotplugMethod, NetConfig, PmemConfig, ValidationError, VmConfig, +}; use crate::cpu; use crate::device_manager::{get_win_size, Console, DeviceManager, DeviceManagerError}; use crate::memory_manager::{Error as MemoryManagerError, MemoryManager}; @@ -191,6 +193,9 @@ pub enum Error { /// Cannot convert source URL from Path into &str RestoreSourceUrlPathToStr, + + /// Failed to validate config + ConfigValidation(ValidationError), } pub type Result = result::Result; @@ -309,6 +314,12 @@ impl Vm { reset_evt: EventFd, vmm_path: PathBuf, ) -> Result { + config + .lock() + .unwrap() + .validate() + .map_err(Error::ConfigValidation)?; + let device_manager = DeviceManager::new( fd.clone(), config.clone(),